wscalls: unflatten payload when calling webservice (#66916) #1204

Merged
smihai merged 2 commits from wip/66916-wscall-apply-unflatten-payload into main 2024-04-15 16:54:33 +02:00
Owner
No description provided.
smihai added 1 commit 2024-02-28 17:35:43 +01:00
fpeters reviewed 2024-02-28 17:45:57 +01:00
wcs/wscalls.py Outdated
@ -51,0 +69,4 @@
def split_key(key):
def map_key(x):
if x.isnumeric():
Owner

Dans w.c.s. on a misc.is_ascii_digit() pour faire le is_number() de passerelle, c'est nécessaire parce que :

>>> '²'.isnumeric()
True
>>> '൨'.isnumeric()
True
>>> 'Ⅱ'.isnumeric()
True
etc.
Dans w.c.s. on a misc.is_ascii_digit() pour faire le is_number() de passerelle, c'est nécessaire parce que : ``` >>> '²'.isnumeric() True >>> '൨'.isnumeric() True >>> 'Ⅱ'.isnumeric() True etc. ```
smihai marked this conversation as resolved
fpeters reviewed 2024-02-28 17:47:45 +01:00
wcs/wscalls.py Outdated
@ -51,0 +75,4 @@
return x.replace('%s%s' % (separator, separator), separator)
return x
return [map_key(x) for x in re.split(r'(?<!%s)%s(?!%s)' % (separator, separator, separator), key)]
Owner

On ne va pas rendre le séparateur paramétrable, la fonction sera plus lisible sans ça.

(ça vaut quand même le coup d'expliciter l'objectif de la regex).

On ne va pas rendre le séparateur paramétrable, la fonction sera plus lisible sans ça. (ça vaut quand même le coup d'expliciter l'objectif de la regex).
Author
Owner

J'ai viré la regex car il n'y a pas besoin de l'utiliser pour découper la chaîne.

J'ai viré la regex car il n'y a pas besoin de l'utiliser pour découper la chaîne.
smihai marked this conversation as resolved
fpeters reviewed 2024-02-28 17:48:50 +01:00
wcs/wscalls.py Outdated
@ -410,1 +497,4 @@
},
hint=_(
'Parameters names could be separated by / character to create object or array payload,'
' ex: parameter named "element/child" with value "value" will be sent as {"element": {"child": "value"}.'
Owner

reprendre/traduire la version avancée de l'explication donnée dans le ticket.

reprendre/traduire la version avancée de l'explication donnée dans le ticket.
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from a056d7b8c0 to c94efb7d1c 2024-02-29 12:14:59 +01:00 Compare
tnoel reviewed 2024-03-19 11:15:58 +01:00
wcs/wscalls.py Outdated
@ -158,0 +235,4 @@
unflattened_data = unflatten_data(post_data)
except UnflattenDataException as e:
get_publisher().record_error(
exception=e, context='[WSCALL]', notify=notify_on_errors, record=record_on_errors
Owner

Ici il faudrait faire en sorte que le message affiché soit explicite, pour comprendre ce qui a planté (que ce n'est pas l'appel mais la création de l'appel), genre :

Appel webservice impossible, le corps de la requête n'a pas pu être construit, impossible de désapplatir les clés (erreur: ...)

Ici il faudrait faire en sorte que le message affiché soit explicite, pour comprendre ce qui a planté (que ce n'est pas l'appel mais la création de l'appel), genre : _Appel webservice impossible, le corps de la requête n'a pas pu être construit, impossible de désapplatir les clés (erreur: ...)_
Author
Owner

Ok.

Ok.
smihai marked this conversation as resolved
tnoel reviewed 2024-03-19 11:18:20 +01:00
@ -292,0 +314,4 @@
wscall.store()
try:
wscall.call()
except Exception:
Owner

Plutôt utiliser un with pytest.raises le plus restrictif possible

Plutôt utiliser un with pytest.raises le plus restrictif possible
Author
Owner

Au final je ne léve pas d'exception mais plutôt enregistre l'erreur les logs.

Au final je ne léve pas d'exception mais plutôt enregistre l'erreur les logs.
smihai marked this conversation as resolved
tnoel reviewed 2024-03-19 11:19:53 +01:00
@ -292,0 +316,4 @@
wscall.call()
except Exception:
pass
assert http_requests.count() == 1
Owner

faire plutôt un http_requests.empty() avant de lancer le wscall, afin de faire un == 0 ici

faire plutôt un http_requests.empty() avant de lancer le wscall, afin de faire un == 0 ici
Author
Owner

Ok, merci.

Ok, merci.
smihai marked this conversation as resolved
tnoel reviewed 2024-03-19 11:20:47 +01:00
@ -576,0 +599,4 @@
assert payload == {'foo': ['first', 'second'], 'bar': 'example'}
assert http_requests.count() == 1
try:
Owner

même remarque sur le with pytest.raise et le http_requests.empty()

même remarque sur le with pytest.raise et le http_requests.empty()
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from c94efb7d1c to fe7cbb1a7d 2024-03-19 23:28:08 +01:00 Compare
tnoel reviewed 2024-03-22 10:46:37 +01:00
wcs/wf/wscall.py Outdated
@ -301,0 +310,4 @@
'"element": {"child": "value"}. If the subkey, i.e. "child", is an integer it will '
'become a list index and two elements "element/0", "element/1" containing "value1" '
'and "value2" will generate the payload "element": ["value1", "value2"]. '
'It is possible to combine the two types, for example "element/0/key1" to generate '
Owner

Comme j'ai eu du support à faire ce matin sur le sujet, on pourrait ajouter un petit bout qui dit qu'en cas de element/0, element/1, le 0 est obligatoire. Genre ajouter un "index 0 is mandatory" :

If the subkey, i.e. "child", is an integer it will become a list index and two elements "element/0", "element/1" containing "value1" and "value2" will generate the payload "element": ["value1", "value2"] (note: index 0 is mandatory).

Bon, si c'est jugé trop lourdingue tu oublies, on essayera de faire préciser ça dans une doc, qui contiendra des exemples.

Comme j'ai eu du support à faire ce matin sur le sujet, on pourrait ajouter un petit bout qui dit qu'en cas de element/0, element/1, le 0 est obligatoire. Genre ajouter un "index 0 is mandatory" : _If the subkey, i.e. "child", is an integer it will become a list index and two elements "element/0", "element/1" containing "value1" and "value2" will generate the payload "element": ["value1", "value2"] (note: index 0 is mandatory)._ Bon, si c'est jugé trop lourdingue tu oublies, on essayera de faire préciser ça dans une doc, qui contiendra des exemples.
Author
Owner

On n'est pas à quelques mots près. J'ai rajouté la remarque sur les indexes.

On n'est pas à quelques mots près. J'ai rajouté la remarque sur les indexes.
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from fe7cbb1a7d to d4e1d9c0ac 2024-03-22 11:07:03 +01:00 Compare
smihai changed title from WIP: wscalls: unflatten payload when calling webservice (#66916) to wscalls: unflatten payload when calling webservice (#66916) 2024-03-22 11:13:06 +01:00
tnoel requested changes 2024-03-22 15:47:07 +01:00
wcs/wscalls.py Outdated
@ -51,0 +61,4 @@
into:
{"a": {"b": [{"x": "1234"}]}}
"""
Owner

Et tout à coup je me demande si on ne veut pas, dès maintenant, prévoir la possibilité d'échappement ? Genre « // » ?

Et tout à coup je me demande si on ne veut pas, dès maintenant, prévoir la possibilité d'échappement ? Genre « // » ?
Owner

C'est déjà géré, par cette partie :

            elif isinstance(x, str):
                return x.replace('//', '/') 

il faudrait donc y ajouter un commentaire pour expliciter.

C'est déjà géré, par cette partie : ``` elif isinstance(x, str): return x.replace('//', '/') ``` il faudrait donc y ajouter un commentaire pour expliciter.
Author
Owner

Ok, j'ajoute un commentaire et un test.

Ok, j'ajoute un commentaire et un test.
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -155,3 +233,3 @@
payload = {}
with get_publisher().complex_data():
for key, value in post_data.items():
for key, value in unflatten_keys(post_data).items():
Owner

J'ai l'impression d'une erreur ici, il faut plutôt faire le compute sur les clés d'origine (avec les /) et ensuite seulement, faire le unflatten... non ?

J'ai l'impression d'une erreur ici, il faut plutôt faire le compute sur les clés d'origine (avec les /) et ensuite seulement, faire le unflatten... non ?
Author
Owner

J'ai l'impression d'une erreur ici, il faut plutôt faire le compute sur les clés d'origine (avec les /) et ensuite seulement, faire le unflatten... non ?

Je dois rater quelque chose mais je ne saisis pas la différence entre l'appel avant ou après le compute.
J'ai modifié le test pour montrer que cela fonctionne avec le unflatten avant le calcul des valeurs.

> J'ai l'impression d'une erreur ici, il faut plutôt faire le compute sur les clés d'origine (avec les /) et ensuite seulement, faire le unflatten... non ? Je dois rater quelque chose mais je ne saisis pas la différence entre l'appel avant ou après le `compute`. J'ai modifié le test pour montrer que cela fonctionne avec le unflatten avant le calcul des valeurs.
Owner

Par exemple si tu mets « 'foo/2': '{{ form_name }}', » dans ton test, ça va envoyer '{{ form_name }}' dans la liste foo, sans faire le compute:

--- a/tests/workflow/test_wscall.py
+++ b/tests/workflow/test_wscall.py
@@ -594,6 +594,7 @@ def test_webservice_with_unflattened_payload_keys(http_requests, pub):
     item.post_data = {
         'foo/0': 'first',
         'foo/1': 'second',
+        'foo/2': '{{ form_name }}',
         'bar': 'example',
         'form//name': '{{ form_name }}',
     }
@@ -602,7 +603,7 @@ def test_webservice_with_unflattened_payload_keys(http_requests, pub):
     assert http_requests.get_last('url') == 'http://remote.example.net/'
     assert http_requests.get_last('method') == 'POST'
     payload = json.loads(http_requests.get_last('body'))
-    assert payload == {'foo': ['first', 'second'], 'bar': 'example', 'form/name': 'baz'}
+    assert payload == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'}
     assert http_requests.count() == 1
 
     http_requests.empty()

ça ne marche pas:

>       assert payload == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'}
E       AssertionError: assert {'bar': 'example', 'foo': ['first', 'second', '{{ form_name }}'], 'form/name': 'baz'} == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'}
Par exemple si tu mets « 'foo/2': '{{ form_name }}', » dans ton test, ça va envoyer '{{ form_name }}' dans la liste foo, sans faire le compute: ``` --- a/tests/workflow/test_wscall.py +++ b/tests/workflow/test_wscall.py @@ -594,6 +594,7 @@ def test_webservice_with_unflattened_payload_keys(http_requests, pub): item.post_data = { 'foo/0': 'first', 'foo/1': 'second', + 'foo/2': '{{ form_name }}', 'bar': 'example', 'form//name': '{{ form_name }}', } @@ -602,7 +603,7 @@ def test_webservice_with_unflattened_payload_keys(http_requests, pub): assert http_requests.get_last('url') == 'http://remote.example.net/' assert http_requests.get_last('method') == 'POST' payload = json.loads(http_requests.get_last('body')) - assert payload == {'foo': ['first', 'second'], 'bar': 'example', 'form/name': 'baz'} + assert payload == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'} assert http_requests.count() == 1 http_requests.empty() ``` ça ne marche pas: ``` > assert payload == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'} E AssertionError: assert {'bar': 'example', 'foo': ['first', 'second', '{{ form_name }}'], 'form/name': 'baz'} == {'foo': ['first', 'second', 'baz'], 'bar': 'example', 'form/name': 'baz'} ```
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from d4e1d9c0ac to 57c3babdc9 2024-03-24 22:22:43 +01:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 57c3babdc9 to 6db003b1c8 2024-03-24 22:43:40 +01:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 6db003b1c8 to d60cacb833 2024-03-24 22:55:03 +01:00 Compare
smihai requested review from tnoel 2024-03-25 22:05:52 +01:00
fpeters requested changes 2024-03-26 07:58:02 +01:00
Dismissed
fpeters left a comment
Owner

Et pour moi il est vraiment important d'avoir la fenêtre d'explicitation à l'admin de ce que vont donner ses clés.

Et pour moi il est vraiment important d'avoir la fenêtre d'explicitation à l'admin de ce que vont donner ses clés.
wcs/wscalls.py Outdated
@ -51,0 +66,4 @@
if not isinstance(d, dict) or not d: # unflattening an empty dict has no sense
return d
# ok d is a dict
Owner

Ce commentaire n'apporte pas grand chose.

Ce commentaire n'apporte pas grand chose.
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +77,4 @@
return x.replace('//', '/')
return x
return [map_key(x) for x in re.split(r'(?<!/)/(?!/)', key)]
Owner

Tout le monde ne lit pas les regex facilement, un commentaire pour l'expliciter serait utile.

Tout le monde ne lit pas les regex facilement, un commentaire pour l'expliciter serait utile.
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +83,4 @@
try:
keys.sort()
except TypeError:
# sorting fail means that there is mix between lists and dicts
Owner

a mix

a mix
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +84,4 @@
keys.sort()
except TypeError:
# sorting fail means that there is mix between lists and dicts
raise UnflattenKeysException(_('incorrect elements order'))
Owner

Le commentaire dit qu'e c'est parce qu'il y a un mélange mais l'exception dit que c'est parce qu'il y a un problème d'ordre ?

Le commentaire dit qu'e c'est parce qu'il y a un mélange mais l'exception dit que c'est parce qu'il y a un problème d'ordre ?
Author
Owner

Corrigé le message de l'exception.

Corrigé le message de l'exception.
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +91,4 @@
key, tail = path[i], path[i + 1 :]
if not tail: # end of path, set thevalue
Owner

set the value

set the value
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +99,4 @@
d.append(value)
else:
assert isinstance(d, dict)
d[key] = value
Owner

Je serais pour ici avoir un "return # end recursion", et enchainer la suite un nouveau d'indentation plus bas (retirer le else de la ligne suivante).

Cela parce qu'à la lecture de la fonction je me suis perdu dans l'indentation et avec l'appel set_path() qui la termine je ne voyais pas comment la récursion s'arrêtait.

Je serais pour ici avoir un "return # end recursion", et enchainer la suite un nouveau d'indentation plus bas (retirer le else de la ligne suivante). Cela parce qu'à la lecture de la fonction je me suis perdu dans l'indentation et avec l'appel set_path() qui la termine je ne voyais pas comment la récursion s'arrêtait.
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +107,4 @@
assert isinstance(d, list)
if len(d) < key:
raise UnflattenKeysException(
_('incomplete array before %s in %s') % ('/'.join(map(str, path[: i + 1])), orig_key)
Owner

C'est possible de réécrire le map sous forme de list comprehension ? (str(x) for x in in path[...])

C'est possible de réécrire le map sous forme de list comprehension ? (str(x) for x in in path[...])
smihai marked this conversation as resolved
wcs/wscalls.py Outdated
@ -51,0 +118,4 @@
set_path(path, orig_key, new, value, i + 1)
# Is the first level an array or a dict ?
if isinstance(keys[0][0][0], int):
Owner

Possibilité d'étendre le commentaire avec un rappel de ce que contiendrait keys ici ?

Possibilité d'étendre le commentaire avec un rappel de ce que contiendrait keys ici ?
Author
Owner

Bonne remarque.
J'ai complété le test pour couvrir les 2 cas.

Bonne remarque. J'ai complété le test pour couvrir les 2 cas.
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from d60cacb833 to b4a00ae80e 2024-03-26 22:21:33 +01:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from b4a00ae80e to 09659122ea 2024-03-27 11:43:22 +01:00 Compare
smihai changed title from wscalls: unflatten payload when calling webservice (#66916) to WIP: wscalls: unflatten payload when calling webservice (#66916) 2024-03-27 11:44:56 +01:00
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 09659122ea to a016545d48 2024-03-27 11:55:28 +01:00 Compare
smihai added 1 commit 2024-04-02 16:19:53 +02:00
gitea/wcs/pipeline/head There was a failure building this commit Details
7dd0b39585
wscalls: preview unflattened payload (#66916)
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 7dd0b39585 to 236fdd8f49 2024-04-02 16:49:08 +02:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 236fdd8f49 to ce66482478 2024-04-03 12:21:02 +02:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from ce66482478 to 4df0449045 2024-04-03 15:22:30 +02:00 Compare
Author
Owner

Voici un aperçu du preview du payload.

Voici un aperçu du preview du payload.
fpeters reviewed 2024-04-03 15:38:48 +02:00
wcs/root.py Outdated
@ -213,6 +216,7 @@ class RootDirectory(Directory):
'fargo',
'static',
'actions',
('preview-json-payload', 'preview_json_payload'),
Owner

Déplace plutôt ça sous api/, dans api.py, et il pourrait y avoir une vérification que l'appelant peut aller dans le backoffice (pour rester simple, ne pas entrer dans les permissions d'accès aux workflows/appels webservice).

Déplace plutôt ça sous api/, dans api.py, et il pourrait y avoir une vérification que l'appelant peut aller dans le backoffice (pour rester simple, ne pas entrer dans les permissions d'accès aux workflows/appels webservice).
smihai marked this conversation as resolved
wcs/root.py Outdated
@ -303,0 +335,4 @@
r += htmltext('<div class="payload-preview">')
try:
dump = json.dumps(unflatten_keys(payload), ensure_ascii=False, indent=2)
r += htmltext('<pre>%s</pre>') % dump.replace('"{{', '{{').replace('}}"', '}}')
Owner

En pratique on pourrait aussi très bien avoir des {% ou des {{ qui ne sont pas en début de chaine; il y a peut-être moyen de gérer ces cas aussi, en imaginant que sur chaque ligne, s'il y a une chaine en valeur, si elle est détectée comme étant un gabarit, alors retirer les " de la valeur.

Ça pourrait aussi se combiner en mettant ces valeurs dans un <span class=...>, pour les identifier comme des endroits qui seront transformés.

En pratique on pourrait aussi très bien avoir des {% ou des {{ qui ne sont pas en début de chaine; il y a peut-être moyen de gérer ces cas aussi, en imaginant que sur chaque ligne, s'il y a une chaine en valeur, si elle est détectée comme étant un gabarit, alors retirer les " de la valeur. Ça pourrait aussi se combiner en mettant ces valeurs dans un `<span class=...>`, pour les identifier comme des endroits qui seront transformés.
Author
Owner

En pratique on pourrait aussi très bien avoir des {% ou des {{ qui ne sont pas en début de chaine; il y a peut-être moyen de gérer ces cas aussi, en imaginant que sur chaque ligne, s'il y a une chaine en valeur, si elle est détectée comme étant un gabarit, alors retirer les " de la valeur.

S'ils ne sont pas en début de chaîne alors il me semble ok de laisser les guillemets car le résultat sera une chaîne de caractères avec les valeurs des gabarits entourés de texte. Non ?

> En pratique on pourrait aussi très bien avoir des {% ou des {{ qui ne sont pas en début de chaine; il y a peut-être moyen de gérer ces cas aussi, en imaginant que sur chaque ligne, s'il y a une chaine en valeur, si elle est détectée comme étant un gabarit, alors retirer les " de la valeur. > S'ils ne sont pas en début de chaîne alors il me semble ok de laisser les guillemets car le résultat sera une chaîne de caractères avec les valeurs des gabarits entourés de texte. Non ?
Owner

S'ils ne sont pas en début de chaîne alors il me semble ok de laisser les guillemets car le résultat sera une chaîne de caractères avec les valeurs des gabarits entourés de texte. Non ?

Oui, c'était davantage pour l'uniformité (d'où la partie css dessous), histoire que "test {{form_var_test}}" et "{{form_var_test}}" et "{{form_var_test}}{% if 1 %}hello{% endif %}" apparaissent pareil; mais ok si tu veux zappons ça pour le moment, juste gérer {% %} en début/fin de chaine en plus, alors.

> S'ils ne sont pas en début de chaîne alors il me semble ok de laisser les guillemets car le résultat sera une chaîne de caractères avec les valeurs des gabarits entourés de texte. Non ? Oui, c'était davantage pour l'uniformité (d'où la partie css dessous), histoire que "test {{form_var_test}}" et "{{form_var_test}}" et "{{form_var_test}}{% if 1 %}hello{% endif %}" apparaissent pareil; mais ok si tu veux zappons ça pour le moment, juste gérer {% %} en début/fin de chaine en plus, alors.
Author
Owner

Ça pourrait aussi se combiner en mettant ces valeurs dans un <span class=...>, pour les identifier comme des endroits qui seront transformés.

Je suis parti pour parcourrir le payload et produire un HTML englobant les elements dans des "<span...>".

> > Ça pourrait aussi se combiner en mettant ces valeurs dans un `<span class=...>`, pour les identifier comme des endroits qui seront transformés. > Je suis parti pour parcourrir le payload et produire un HTML englobant les elements dans des "<span...>".
smihai marked this conversation as resolved
wcs/root.py Outdated
@ -303,0 +337,4 @@
dump = json.dumps(unflatten_keys(payload), ensure_ascii=False, indent=2)
r += htmltext('<pre>%s</pre>') % dump.replace('"{{', '{{').replace('}}"', '}}')
except UnflattenKeysException as e:
r += htmltext('<div class="errornotice"><p>%s</p><p>%s<code>%s</code></p></div>') % (
Owner

Les exceptions sont traduites/lisibles, en voyant la capture d'écran je me suis dit que c'était dommage de les afficher dans un <code>.

Les exceptions sont traduites/lisibles, en voyant la capture d'écran je me suis dit que c'était dommage de les afficher dans un `<code>`.
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 4df0449045 to e9766d6c10 2024-04-10 17:11:31 +02:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from e9766d6c10 to 8885b19d77 2024-04-10 17:19:51 +02:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 8885b19d77 to a3d05511b7 2024-04-12 10:03:32 +02:00 Compare
smihai requested review from fpeters 2024-04-12 10:17:13 +02:00
smihai changed title from WIP: wscalls: unflatten payload when calling webservice (#66916) to wscalls: unflatten payload when calling webservice (#66916) 2024-04-12 10:25:52 +02:00
fpeters requested changes 2024-04-12 10:53:01 +02:00
Dismissed
fpeters left a comment
Owner

Des mini-commentaires d'apparence, puis ça sera ok je pense.

Des mini-commentaires d'apparence, puis ça sera ok je pense.
@ -3134,0 +3135,4 @@
span.payload-preview {
&--value {
font-family: Monospace;
}
Owner

monospace sans majuscule, et je la verrais plutôt sur le bloc entier, là ça fait étrange d'avoir les clés et les valeurs avec une police différente. Pour la lisiiblité aussi j'y ajouterais line-height: 150%.

Et pour distinguer ici, je jouerais plutôt sur le fond; on n'a pas de couleur légère pastelle dans gadjo, ici je trouve qu'un jaune léger, #ffa, donne correctement.

monospace sans majuscule, et je la verrais plutôt sur le bloc entier, là ça fait étrange d'avoir les clés et les valeurs avec une police différente. Pour la lisiiblité aussi j'y ajouterais line-height: 150%. Et pour distinguer ici, je jouerais plutôt sur le fond; on n'a pas de couleur légère pastelle dans gadjo, ici je trouve qu'un jaune léger, #ffa, donne correctement.
Author
Owner

monospace sans majuscule, et je la verrais plutôt sur le bloc entier, là ça fait étrange d'avoir les clés et les valeurs avec une police différente. Pour la lisiiblité aussi j'y ajouterais line-height: 150%.

Ok, appliqué.

Et pour distinguer ici, je jouerais plutôt sur le fond; on n'a pas de couleur légère pastelle dans gadjo, ici je trouve qu'un jaune léger, #ffa, donne correctement.

Avec mes yeux pétés je trouve que le jaune #ffa est un peu trop violent, je l'ai rendu un peu plus pâle: #ffc.

> monospace sans majuscule, et je la verrais plutôt sur le bloc entier, là ça fait étrange d'avoir les clés et les valeurs avec une police différente. Pour la lisiiblité aussi j'y ajouterais line-height: 150%. > Ok, appliqué. > Et pour distinguer ici, je jouerais plutôt sur le fond; on n'a pas de couleur légère pastelle dans gadjo, ici je trouve qu'un jaune léger, #ffa, donne correctement. Avec mes yeux pétés je trouve que le jaune #ffa est un peu trop violent, je l'ai rendu un peu plus pâle: #ffc.
smihai marked this conversation as resolved
@ -3134,0 +3141,4 @@
display: block;
}
&--item-separator::after {
content: '\a';
Owner

Un petit commentaire à côté pour dire que c'est pour forcer un retour à la ligne ?

Un petit commentaire à côté pour dire que c'est pour forcer un retour à la ligne ?
Author
Owner

rajouté

rajouté
smihai marked this conversation as resolved
wcs/views.py Outdated
@ -88,6 +88,7 @@ def i18n_js(request):
'close': _('Close'),
'email_domain_suggest': _('Did you want to write'),
'email_domain_fix': _('Apply fix'),
'preview_json_payload': _('Preview produced payload'),
Owner

Preview payload structure ?

Preview payload structure ?
Author
Owner

En effet, c'est mieux.

En effet, c'est mieux.
smihai marked this conversation as resolved
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from a3d05511b7 to e84240387d 2024-04-12 11:26:17 +02:00 Compare
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from e84240387d to 5dcfd59175 2024-04-12 11:38:00 +02:00 Compare
Author
Owner

Branche mise à jour.

Branche mise à jour.
smihai requested review from fpeters 2024-04-12 11:43:51 +02:00
Author
Owner

Exemples de rendu.

Exemples de rendu.
Owner

Exemples de rendu.

Ah j'ai du me planter dans ma description des classes, je pensais au jaune uniquement pour les endroits qui ont du "gabarit complexe".

> Exemples de rendu. Ah j'ai du me planter dans ma description des classes, je pensais au jaune uniquement pour les endroits qui ont du "gabarit complexe".
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 5dcfd59175 to 28f48f4ed4 2024-04-15 10:25:09 +02:00 Compare
Author
Owner

D'acc. Corrigé.

D'acc. Corrigé.
Owner

Joilijoli (les captures).

Joilijoli (les captures).
smihai force-pushed wip/66916-wscall-apply-unflatten-payload from 28f48f4ed4 to 18be525b2e 2024-04-15 14:23:14 +02:00 Compare
fpeters approved these changes 2024-04-15 16:53:26 +02:00
smihai merged commit 12bdb4a498 into main 2024-04-15 16:54:33 +02:00
smihai deleted branch wip/66916-wscall-apply-unflatten-payload 2024-04-15 16:54:33 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
4 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/wcs#1204
No description provided.