Avez-vous essayé de repartir un repo à partir de zéro ? #28

Closed
opened 2023-02-07 00:17:44 +01:00 by eviau · 35 comments
Image
Contributor

Bonjour !

En lien avec #27 : je tente de repartir le repo à partir de zéro question de voir si le déménagement vers git.afpy.org s'est bien déroulé.

Suite au git clone, quand je fais make verifs j'ai l'erreur suivante:

Searching for long lines...
awk: line 2: function gensub never defined
awk: line 2: function gensub never defined
make: *** [Makefile:144 : line-length] Erreur 2

Est-ce un oubli ? Quelque chose en cours ?

Bonjour ! En lien avec https://git.afpy.org/AFPy/python-docs-fr/pulls/27 : je tente de repartir le repo à partir de zéro question de voir si le déménagement vers git.afpy.org s'est bien déroulé. Suite au `git clone`, quand je fais `make verifs` j'ai l'erreur suivante: ``` Searching for long lines... awk: line 2: function gensub never defined awk: line 2: function gensub never defined make: *** [Makefile:144 : line-length] Erreur 2 ``` Est-ce un oubli ? Quelque chose en cours ?
Image
Owner

Tu as peut-être une autre version de awk, peux-tu nous partager le résultat d'un awk --version ?

Ici j'ai :

$ awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.2.0, GNU MP 6.2.1)

Copyright © 1998, 1991-2020 Free Software Foundation.

Ce programme est un logiciel libre ; vous pouvez le redistribuer et le
modifier selon les termes de la licence publique générale GNU (GNU
General Public License), telle que publiée par la Free Software
Foundation ; soit selon la version 3 de cette licence, soit selon une
version ultérieure de votre choix.

Ce logiciel est distribué en espérant qu'il sera utile, mais SANS AUCUNE
GARANTIE, y compris les garanties implicites D'ADAPTATION À UN BUT
SPÉCIFIQUE et de COMMERCIALISATION. Pour plus d'informations à ce
sujet, consultez le texte de la licence publique générale GNU (GNU
General Public License).

Vous devriez avoir reçu copie de la licence publique générale GNU
(GNU General Public License) avec ce programme. Sinon, consultez
http://www.gnu.org/licenses/.

(Wahh quelqu'un a traduit ça aussi !)

Tu as peut-être une autre version de `awk`, peux-tu nous partager le résultat d'un `awk --version` ? Ici j'ai : ``` $ awk --version GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.2.0, GNU MP 6.2.1) Copyright © 1998, 1991-2020 Free Software Foundation. Ce programme est un logiciel libre ; vous pouvez le redistribuer et le modifier selon les termes de la licence publique générale GNU (GNU General Public License), telle que publiée par la Free Software Foundation ; soit selon la version 3 de cette licence, soit selon une version ultérieure de votre choix. Ce logiciel est distribué en espérant qu'il sera utile, mais SANS AUCUNE GARANTIE, y compris les garanties implicites D'ADAPTATION À UN BUT SPÉCIFIQUE et de COMMERCIALISATION. Pour plus d'informations à ce sujet, consultez le texte de la licence publique générale GNU (GNU General Public License). Vous devriez avoir reçu copie de la licence publique générale GNU (GNU General Public License) avec ce programme. Sinon, consultez http://www.gnu.org/licenses/. ``` (Wahh quelqu'un a traduit ça aussi !)
Image
Author
Contributor

Oui c'était cela - j'avais mawk et non gawk - voir stackoverflow.

Maintenant je suis sur une piste pour les références avec Availability...

Mon hypothèse: l'ajout de la directive .. availability:: dans la doc d'origine serait à transférer sur la traduction fr ?

Le message d'erreur d'origine mentionnnait:

python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`']

J'ai lu sur le markup nécessaire pour traduire le texte d'une référence tout en gardant le lien de la référence --- voir https://github.com/sphinx-doc/sphinx/issues/1191 pour une piste.

J'ai vérifié dans library/os.po toutes les références à la section Availabiility... et maintenant j'obtiens l'erreur suivante:

python-docs-fr/venv/cpython/Doc/library/os.rst:1313:<translated>:1:lablel non défini: 1<availability>

Et si on suit dans le fichier os.rst, on voit qu'une directive ... availability:: a été ajoutée. Mais quand ? En remontant dans le temps, je vois que c'est déjà le cas à 3.7...

Je ne sais pas trop si c'est la bonne piste - ou quelle serait la bonne prochaine étape. J'ai probablement fait une erreur quelque part 😅

Oui c'était cela - j'avais `mawk` et non `gawk` - [voir stackoverflow](https://askubuntu.com/a/710381). Maintenant je suis sur une piste pour les références avec *Availability*... Mon hypothèse: l'ajout de la directive `.. availability::` dans la doc d'origine serait à transférer sur la traduction `fr` ? Le message d'erreur d'origine mentionnnait: ``` python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`'] ``` J'ai lu sur le *markup* nécessaire pour traduire le texte d'une référence tout en gardant le lien de la référence --- voir https://github.com/sphinx-doc/sphinx/issues/1191 pour une piste. J'ai vérifié dans `library/os.po` toutes les références à la section *Availabiility*... et maintenant j'obtiens l'erreur suivante: ``` python-docs-fr/venv/cpython/Doc/library/os.rst:1313:<translated>:1:lablel non défini: 1<availability> ``` Et si on suit dans le fichier `os.rst`, on voit qu'une directive `... availability::` a été ajoutée. Mais quand ? En remontant dans le temps, je vois [que c'est déjà le cas à 3.7](https://raw.githubusercontent.com/python/cpython/3.7/Doc/library/os.rst)... Je ne sais pas trop si c'est la bonne piste - ou quelle serait la bonne prochaine étape. J'ai probablement fait une erreur quelque part 😅
Image
Owner

Bon déjà #29.

Bon déjà https://git.afpy.org/AFPy/python-docs-fr/pulls/29.
Image
Owner

OK j'ai ton erreur après avoir réparé #29.

/home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:Availability <availability>', ':ref:wasm-availability'], traduit : [':ref:Disponibilité <availability>']

OK j'ai ton erreur après avoir réparé #29. > /home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`']
Image
Owner

Je pense que le problème d'availability vient de cpython (pyspecific.py).

Je pense que le problème d'availability vient de cpython (pyspecific.py).
Image
Owner

Probablement lié à :

Probablement lié à : - https://github.com/sphinx-doc/sphinx/issues/8932 - et le commit dbfabcc0c306742e34b9b0e162c63ccebe9d2b05 dans cpython
Image
Owner

En appliquant :

diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py
index db7bb3b442..4c002e1277 100644
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -141,6 +141,7 @@ def run(self):
         availability_ref = ':ref:`Availability <availability>`: '
         pnode = nodes.paragraph(availability_ref + self.arguments[0],
                                 classes=["availability"],)
+        pnode.line = self.lineno
         n, m = self.state.inline_text(availability_ref, self.lineno)
         pnode.extend(n + m)
         n, m = self.state.inline_text(self.arguments[0], self.lineno)

côté cpython on obtiens le numéro de la ligne dans l'erreur :

/home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst:371:ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`']

Mais ça n'aide pas beaucoup...

En appliquant : ```patch diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index db7bb3b442..4c002e1277 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -141,6 +141,7 @@ def run(self): availability_ref = ':ref:`Availability <availability>`: ' pnode = nodes.paragraph(availability_ref + self.arguments[0], classes=["availability"],) + pnode.line = self.lineno n, m = self.state.inline_text(availability_ref, self.lineno) pnode.extend(n + m) n, m = self.state.inline_text(self.arguments[0], self.lineno) ``` côté cpython on obtiens le numéro de la ligne dans l'erreur : ``` /home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst:371:ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`'] ``` Mais ça n'aide pas beaucoup...
Image
Owner

Damned, je n'ai pas plus d'indices :(

Damned, je n'ai pas plus d'indices :(
Image
Collaborator

En attendant que l'on trouve comment résoudre le problème, un contournement possible est d'utiliser :
make SPHINXERRORHANDLING=

qui continue la compilation malgré les warnings.

En attendant que l'on trouve comment résoudre le problème, un contournement possible est d'utiliser : `make SPHINXERRORHANDLING=` qui continue la compilation malgré les warnings.
Image
Collaborator

Avec Sphinx v6.1.3 et ton patch sur pyspecific.py, j'obtiens :

/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:5: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:5: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:7: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:8: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:6: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:6: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:13: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
/home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:25: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`']
Avec Sphinx v6.1.3 et ton patch sur pyspecific.py, j'obtiens : ``` /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:5: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:5: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:7: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:8: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:6: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:6: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:13: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] /home/chris/traduc/python-docs-fr/venv/cpython/Doc/library/os.rst:25: WARNING: inconsistent term references in translated message. original: [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], translated: [':ref:`Disponibilité <availability>`'] ```
Image
Collaborator

Il va me falloir un peu de temps pour comprendre vraiment ce qui se passe, mais la bonne nouvelle, c'est que j'ai un patch sur CPython qui a l'air de faire le job.

diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py
index 6c383ea57c..ef4f26eafe 100644
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -144,18 +144,16 @@ class Availability(Directive):
 
     def run(self):
         availability_ref = ':ref:`Availability <availability>`: '
-        pnode = nodes.paragraph(availability_ref + self.arguments[0],
-                                classes=["availability"],)
-        n, m = self.state.inline_text(availability_ref, self.lineno)
-        pnode.extend(n + m)
-        n, m = self.state.inline_text(self.arguments[0], self.lineno)
-        pnode.extend(n + m)
+        avail_text, avail_msgs = self.state.inline_text(availability_ref, self.lineno)
+        arg_text, arg_msgs = self.state.inline_text(self.arguments[0], self.lineno)
+        pnode = nodes.paragraph(availability_ref + self.arguments[0], '',
+                                *avail_text, *avail_msgs, *arg_text, *arg_msgs)
+        cnode = nodes.compound('', pnode, classes=["availability"])
         if self.content:
-            self.state.nested_parse(self.content, self.content_offset, pnode)
-
+            self.state.nested_parse(self.content, self.content_offset, cnode)
         self.parse_platforms()
 
-        return [pnode]
+        return [cnode]
 
     def parse_platforms(self):
         """Parse platform information from arguments
Il va me falloir un peu de temps pour comprendre vraiment ce qui se passe, mais la bonne nouvelle, c'est que j'ai un patch sur CPython qui a l'air de faire le job. ```diff diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index 6c383ea57c..ef4f26eafe 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -144,18 +144,16 @@ class Availability(Directive): def run(self): availability_ref = ':ref:`Availability <availability>`: ' - pnode = nodes.paragraph(availability_ref + self.arguments[0], - classes=["availability"],) - n, m = self.state.inline_text(availability_ref, self.lineno) - pnode.extend(n + m) - n, m = self.state.inline_text(self.arguments[0], self.lineno) - pnode.extend(n + m) + avail_text, avail_msgs = self.state.inline_text(availability_ref, self.lineno) + arg_text, arg_msgs = self.state.inline_text(self.arguments[0], self.lineno) + pnode = nodes.paragraph(availability_ref + self.arguments[0], '', + *avail_text, *avail_msgs, *arg_text, *arg_msgs) + cnode = nodes.compound('', pnode, classes=["availability"]) if self.content: - self.state.nested_parse(self.content, self.content_offset, pnode) - + self.state.nested_parse(self.content, self.content_offset, cnode) self.parse_platforms() - return [pnode] + return [cnode] def parse_platforms(self): """Parse platform information from arguments ```
Image
Author
Contributor

Ah j'ai trouvé je pense !

Ah j'ai trouvé je pense !
Image
Author
Contributor

Donc en combinant le patch de @mdk et le make de @ChristopheNan - j'obtiens qu'en fait, ce qui dans library/os.rst (notez que c'est le fichier .rst), l'indentation du texte suivant la directive .. availability: est d'un niveau d'indentation de trop.

En effet, là où on a, vers les lignes 371 et quelques:

   .. availability:: Unix.

      The function is a stub on Emscripten and WASI, see
      :ref:`wasm-availability` for more information.

On devrait avoir - ou du moins, ceci permet de compiler sans erreurs:

   .. availability:: Unix.

   The function is a stub on Emscripten and WASI, see
   :ref:`wasm-availability` for more information.

Est-ce qu'originalement, on souhaitait que la directive availability agisse sur le texte la suivant ou non - là je ne sais pas... mais bon, j'arrive à compiler 💯

Je vais pousser sur ma branche pour que ce soit plus clair - et vous pourrez voir l'ensemble des autres changements par le fait même.

Donc en combinant le patch de @mdk et le `make` de @ChristopheNan - j'obtiens qu'en fait, ce qui dans `library/os.rst` (notez que c'est le fichier .rst), l'indentation du texte suivant la directive `.. availability:` est d'un niveau d'indentation de trop. En effet, là où on a, vers les lignes 371 et quelques: ``` .. availability:: Unix. The function is a stub on Emscripten and WASI, see :ref:`wasm-availability` for more information. ``` On devrait avoir - ou du moins, ceci permet de compiler sans erreurs: ``` .. availability:: Unix. The function is a stub on Emscripten and WASI, see :ref:`wasm-availability` for more information. ``` Est-ce qu'originalement, on souhaitait que la directive `availability` agisse sur le texte la suivant ou non - là je ne sais pas... mais bon, j'arrive à compiler :100: Je vais pousser sur ma branche pour que ce soit plus clair - et vous pourrez voir l'ensemble des autres changements par le fait même.
Image
Collaborator

@eviau J'ai l'impression que Gitea ne met pas forcément à jour la page quand d'autres personnes ajoutent des commentaires. En tous cas, tu n'as pas l'air d'avoir vu mon commentaire ci-dessus. Mais pour quand tu le verras ainsi que celui-ci : certes, enlever l'indentation fonctionne, mais elle est intentionnelle.

@eviau J'ai l'impression que Gitea ne met pas forcément à jour la page quand d'autres personnes ajoutent des commentaires. En tous cas, tu n'as pas l'air d'avoir vu mon commentaire ci-dessus. Mais pour quand tu le verras ainsi que celui-ci : certes, enlever l'indentation fonctionne, mais elle est intentionnelle.
Image
Author
Contributor

@jeanas je pense que la page se met à jour, mais j'étais concentrée - comme je ne suis pas familière avec le code derrière la doc - je suis plutôt côté doc/traduction que doc/code - c'est pas toujours évident me familiariser avec la base de code 😅 donc je n'étais pas certaine si on disait la même chose !

Bref - désolée !

Gardons l'indentation si celle-ci est intentionnelle - mais j'aimerais bien comprendre comment résoudre le tout... 🕵️

@jeanas je pense que la page se met à jour, mais j'étais concentrée - comme je ne suis pas familière avec le code derrière la doc - je suis plutôt côté doc/traduction que doc/code - c'est pas toujours évident me familiariser avec la base de code :sweat_smile: donc je n'étais pas certaine si on disait la même chose ! Bref - désolée ! Gardons l'indentation si celle-ci est intentionnelle - mais j'aimerais bien comprendre comment résoudre le tout... :detective:
Image
Author
Contributor

Pour tenter de démêler le tout - et en jugeant que l'erreur était probablement de mon côté, même si d'autres l'ont reproduite ? - j'ai reparti une branche sur une version récente de 3.11 - cela semble rouler...

Les changements que j'ai apporté pour que make verifs fonctionne de nouveau sont sur #30

Pour tenter de démêler le tout - et en jugeant que l'erreur était probablement de mon côté, même si d'autres l'ont reproduite ? - j'ai reparti une branche sur une version récente de 3.11 - cela semble rouler... Les changements que j'ai apporté pour que `make verifs` fonctionne de nouveau sont sur #30
Image
Owner

Gardons l'indentation si celle-ci est intentionnelle - mais j'aimerais bien comprendre comment résoudre le tout... 🕵️

Oui elle est intentionnelle, dans pyspecific on le voit ici :

    if self.content:
        self.state.nested_parse(self.content, self.content_offset, pnode)

Ça dit "Si la directive a du contenu, il faut le parser", donc c'est bien attendu qu'elle en ai.

> Gardons l'indentation si celle-ci est intentionnelle - mais j'aimerais bien comprendre comment résoudre le tout... 🕵️ Oui elle est intentionnelle, dans pyspecific on le voit ici : if self.content: self.state.nested_parse(self.content, self.content_offset, pnode) Ça dit "Si la directive a du contenu, il faut le parser", donc c'est bien attendu qu'elle en ai.
Image
Owner

J'ai mergé #30 (qu'on aurait du faire il y a longtemps, merci d'avoir pris le temps de le faire).

Mais j'ai bien toujours :

/home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst:371:ncohérences de références de terme dans le message traduit. Original : [':ref:Availability <availability>', ':ref:wasm-availability'], traduit : [':ref:Disponibilité <availability>']

Je tente un git clean -dfqX pour repartir de zéro (parce que c'est le titre du ticket aussi).

Suivi d'un python -m pip install -r requirements.txt -r venv/cpython/Doc/requirements.txt préconisé par le Makefile, suivi d'un make.

Exactement la même erreur, enfin, en perdant le numéro de ligne parce que j'avais patché ça à la main :

/home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:Availability <availability>', ':ref:wasm-availability'], traduit : [':ref:Disponibilité <availability>']

J'ai mergé #30 (qu'on aurait du faire il y a longtemps, merci d'avoir pris le temps de le faire). Mais j'ai bien toujours : > /home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst:371:ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`'] Je tente un `git clean -dfqX` pour repartir de zéro (parce que c'est le titre du ticket aussi). Suivi d'un `python -m pip install -r requirements.txt -r venv/cpython/Doc/requirements.txt` préconisé par le `Makefile`, suivi d'un `make`. Exactement la même erreur, enfin, en perdant le numéro de ligne parce que j'avais patché ça à la main : > /home/mdk/clones/python/python-docs-fr/venv/cpython/Doc/library/os.rst::ncohérences de références de terme dans le message traduit. Original : [':ref:`Availability <availability>`', ':ref:`wasm-availability`'], traduit : [':ref:`Disponibilité <availability>`']
Image
Author
Contributor

Pour #31, j'ai re-reparti de rien pour tester des hypothèses... ça semble fonctionner maintenant ? Mais ma solution est peut-être pas celle souhaitée - dites-moi ce que vous en pensez :)

Pour #31, j'ai re-reparti de rien pour tester des hypothèses... ça semble fonctionner maintenant ? Mais ma solution est peut-être pas celle souhaitée - dites-moi ce que vous en pensez :)
Image
Owner

J'ai un mini repo qui reproduit vaguement le problème ici :

https://git.afpy.org/mdk/sphinx-directive-i18n

En fait ça ne reproduit pas "le" problème mais sa cause je pense : le contenu de la directive n'est pas rendu du tout !

J'ai un mini repo qui reproduit vaguement le problème ici : https://git.afpy.org/mdk/sphinx-directive-i18n En fait ça ne reproduit pas "le" problème mais sa cause je pense : le contenu de la directive n'est pas rendu du tout !
Image
Collaborator

Pour moi, la racine du problème, c´est le node paragraph qui est utilisé comme conteneur pour toute la directive availability. En particulier, on a des paragraph à l´intérieur un paragraph. Pas très étonnant que ça coince. Je n´ai pas déterminé tous les détails, mais à un moment donné, cela plonge notre Sphinx dans la confusion et il remplace le contenu entier de availability par la traduction de l'argument de la directive seulement, sans le contenu.

D´où mon patch qui remplace le paragraph par un compound.

Pour moi, la racine du problème, c´est le node paragraph qui est utilisé comme conteneur pour toute la directive availability. En particulier, on a des `paragraph` à l´intérieur un `paragraph`. Pas très étonnant que ça coince. Je n´ai pas déterminé tous les détails, mais à un moment donné, cela plonge notre Sphinx dans la confusion et il remplace le contenu entier de availability par la traduction de l'argument de la directive seulement, sans le contenu. D´où mon patch qui remplace le paragraph par un compound.
Image
Owner

Awww merci pour l'explication !

En effet avec le code upstream j'obtiens :

<paragraph classes="availability">
    <pending_xref refdoc="index" refdomain="std" refexplicit="True" reftarget="availability" reftype="ref" refwarn="True">
        <inline classes="xref std std-ref">
            Availability
    : 
    Unix, not Emscripten, not WASI.
    <paragraph>
        Hello world I'm the content of the "availability" directive.

Alors qu'avec ton code j'obtiens :

<compound>
    <paragraph classes="availability">
        <pending_xref refdoc="index" refdomain="std" refexplicit="True" reftarget="availability" reftype="ref" refwarn="True">
            <inline classes="xref std std-ref">
                Availability
        : Unix, not Emscripten, not WASI.
    <paragraph>
        Hello world I'm the content of the "availability" directive.

Pour l'exercice j'ai essayé de le ré-implémenter, ça donne quelque chose de très similaire à toi :

    def run(self):
        availability_ref = ':ref:`Availability <availability>`: '
        n, m = self.state.inline_text(availability_ref + self.arguments[0], self.lineno)
        pnode = nodes.paragraph(availability_ref + self.arguments[0], "", *n, *m)
        cnode = nodes.compound("", pnode, classes=["availability"])
        if self.content:
            self.state.nested_parse(self.content, self.content_offset, cnode)
        self.parse_platforms()
        return [cnode]

J'ai fusionné les deux appels à "inline_text" mais je doute que ce soit une idée lumineuse car ça "mélange" les éventuels messages, j'ignore cependnat à quel point c'est "plus lisible" quand ils sont bien découpés.

En conclusion j'aime bien ta version, tu peux faire une PR upstream ?

Awww merci pour l'explication ! En effet avec le code upstream j'obtiens : ```xml <paragraph classes="availability"> <pending_xref refdoc="index" refdomain="std" refexplicit="True" reftarget="availability" reftype="ref" refwarn="True"> <inline classes="xref std std-ref"> Availability : Unix, not Emscripten, not WASI. <paragraph> Hello world I'm the content of the "availability" directive. ``` Alors qu'avec ton code j'obtiens : ```xml <compound> <paragraph classes="availability"> <pending_xref refdoc="index" refdomain="std" refexplicit="True" reftarget="availability" reftype="ref" refwarn="True"> <inline classes="xref std std-ref"> Availability : Unix, not Emscripten, not WASI. <paragraph> Hello world I'm the content of the "availability" directive. ``` Pour l'exercice j'ai essayé de le ré-implémenter, ça donne quelque chose de très similaire à toi : ```python def run(self): availability_ref = ':ref:`Availability <availability>`: ' n, m = self.state.inline_text(availability_ref + self.arguments[0], self.lineno) pnode = nodes.paragraph(availability_ref + self.arguments[0], "", *n, *m) cnode = nodes.compound("", pnode, classes=["availability"]) if self.content: self.state.nested_parse(self.content, self.content_offset, cnode) self.parse_platforms() return [cnode] ``` J'ai fusionné les deux appels à "inline_text" mais je doute que ce soit une idée lumineuse car ça "mélange" les éventuels messages, j'ignore cependnat à quel point c'est "plus lisible" quand ils sont bien découpés. En conclusion j'aime bien ta version, tu peux faire une PR upstream ?
Image
Owner

J'ai ouvert un ticket côté docutils pour voir s'ils pensent que ça devrait marcher ou s'ils pensent que ça devrait être interdit (et lever une exception ou un warning quand on fait ça).

=> https://sourceforge.net/p/docutils/bugs/466/

J'ai ouvert un ticket côté docutils pour voir s'ils pensent que ça devrait marcher ou s'ils pensent que ça devrait être interdit (et lever une exception ou un warning quand on fait ça). => https://sourceforge.net/p/docutils/bugs/466/
Image
Owner

Bon ça build, mais le résultat n'est pas traduit :D

Bon ça build, mais le résultat n'est pas traduit :D
Image
Owner
Ohhh https://github.com/python/cpython/commit/c351ce6a2c923c5016e48ecbf7b1e4833031d154
Image
Owner

Il nous manque un self.set_source_info(pnode), et donc d'hériter de SphinxDirective pour l'avoir.

C'est donc à ça que sert SphinxDirective :))

Il nous manque un `self.set_source_info(pnode)`, et donc d'hériter de `SphinxDirective` pour l'avoir. C'est donc à ça que sert `SphinxDirective` :))
Image
Owner

OK ça fonctionne !

Il nous faut :

+from sphinx.util.docutils import SphinxDirective

et

-class Availability(Directive):
+class Availability(SphinxDirective):
 
     has_content = True
     required_arguments = 1
@@ -139,18 +145,15 @@ class Availability(Directive):
 
     def run(self):
         availability_ref = ':ref:`Availability <availability>`: '
-        pnode = nodes.paragraph(availability_ref + self.arguments[0],
-                                classes=["availability"],)
-        n, m = self.state.inline_text(availability_ref, self.lineno)
-        pnode.extend(n + m)
-        n, m = self.state.inline_text(self.arguments[0], self.lineno)
-        pnode.extend(n + m)
+        n, m = self.state.inline_text(availability_ref + self.arguments[0], self.lineno)
+        pnode = nodes.paragraph(availability_ref + self.arguments[0], '', *n, *m)
+        self.set_source_info(pnode)
+        cnode = nodes.compound("", pnode, classes=["availability"])
+        self.set_source_info(cnode)
         if self.content:
-            self.state.nested_parse(self.content, self.content_offset, pnode)
-
+            self.state.nested_parse(self.content, self.content_offset, cnode)
         self.parse_platforms()
-
-        return [pnode]
+        return [cnode]

Tu veux ouvrir la PR @jeanas ?

OK ça fonctionne ! Il nous faut : ```diff +from sphinx.util.docutils import SphinxDirective ``` et ```diff -class Availability(Directive): +class Availability(SphinxDirective): has_content = True required_arguments = 1 @@ -139,18 +145,15 @@ class Availability(Directive): def run(self): availability_ref = ':ref:`Availability <availability>`: ' - pnode = nodes.paragraph(availability_ref + self.arguments[0], - classes=["availability"],) - n, m = self.state.inline_text(availability_ref, self.lineno) - pnode.extend(n + m) - n, m = self.state.inline_text(self.arguments[0], self.lineno) - pnode.extend(n + m) + n, m = self.state.inline_text(availability_ref + self.arguments[0], self.lineno) + pnode = nodes.paragraph(availability_ref + self.arguments[0], '', *n, *m) + self.set_source_info(pnode) + cnode = nodes.compound("", pnode, classes=["availability"]) + self.set_source_info(cnode) if self.content: - self.state.nested_parse(self.content, self.content_offset, pnode) - + self.state.nested_parse(self.content, self.content_offset, cnode) self.parse_platforms() - - return [pnode] + return [cnode] ``` Tu veux ouvrir la PR @jeanas ?
Image
Collaborator
Voilà voilà. https://github.com/python/cpython/pull/101846
Image
Collaborator

Le retroportage de la PR cpython 101846 vers 3.11 permettrait de compiler sans avertissement.

Le retroportage de la PR cpython 101846 vers 3.11 permettrait de compiler sans avertissement.
Image
Owner

Le retroportage de la PR cpython 101846 vers 3.11 permettrait de compiler sans avertissement.

En cours.

> Le retroportage de la PR cpython 101846 vers 3.11 permettrait de compiler sans avertissement. En cours.
Image
Owner

Il faudra refaire un python merge.py 3.11 aussi.

Il faudra refaire un `python merge.py 3.11` aussi.
Image
Owner

Et voilà pour le python merge.py 3.11 qui prend en compte la PR de @jeanas #34.

Grâce à vous on pourra démarer le sprint jeudi sans surprises, merci @eviau @jeanas @ChristopheNan !

Et voilà pour le `python merge.py 3.11` qui prend en compte la PR de @jeanas https://git.afpy.org/AFPy/python-docs-fr/pulls/34. Grâce à vous on pourra démarer le sprint jeudi sans surprises, merci @eviau @jeanas @ChristopheNan !
Image
Collaborator

Bravo à 🥇 @eviau @jeanas @mdk 🥇 pour avoir creusé et résolu ce bug avant la PyCon !

Bravo à 🥇 @eviau @jeanas @mdk 🥇 pour avoir creusé et résolu ce bug avant la PyCon !
Image
Owner

@eviau dis-nous si tu vois un autre souci, sinon je te laisse fermer cette issue ?

@eviau dis-nous si tu vois un autre souci, sinon je te laisse fermer cette issue ?
Image
Author
Contributor

oui en effet on peut fermer je pense !

Merci à @mdk et à @jeanas pour la collaboration sur cette issue et pour avoir fait la MR 💯

oui en effet on peut fermer je pense ! Merci à @mdk et à @jeanas pour la collaboration sur cette issue et pour avoir fait la MR :100:
Image eviau closed this issue 2023-03-04 20:21:50 +01:00
Sign in to join this conversation.
No milestone
No project
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
AFPy/python-docs-fr#28
No description provided.