projet crepp_git/crepp-projects/station-meteo/hardware/recepteur/v0 · branche main
kicad_cli_utils.cpython-313.pyc Voir sur GitLab
�

F�j`4��F�SrSSKJr SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r SSjrSSjrSS	jrSS
jrSSjrSSjrSSS
jjr\S:Xa2SSKr\"5urr\"\5 \R6"\(aSOS5 gg!\a "SS5r
\
"5rNwf=f)u�
kicad_cli_utils.py — Résolution et exécution de kicad-cli, partagées entre
le plugin GUI (pcb_assembly.py) et le script d'automatisation CI/CD
(generate_ci.py). Aucune dépendance à wx ni à kipy : juste subprocess/shlex.
�)�annotationsN)�renderc��\rSrSr\R
R
SS5r\R
R
SS5r\R
R
SS5r	Sr
g)	�
_EnvRenderCfg��KICAD_CLI_LINUXz/flatpak run --command=kicad-cli org.kicad.KiCad�KICAD_CLI_WINDOWS�	kicad-cli�KICAD_CLI_MACOS�N)�__name__�
__module__�__qualname__�__firstlineno__�os�environ�getrr	r�__static_attributes__r��Y/home/nico/Documents/crepp_git/CREPP.io/boards/V2.x_pico2/v2.2/scripts/kicad_cli_utils.pyrrsC���*�*�.�.�):�<m�n���J�J�N�N�+>��L���*�*�.�.�):�K�H�rrc
�`�SS/n[RRS5nU(a3UR[RRUSSSSS55 /nUH(nUR
[R"U55 M* U(dg	SS
jnURUSS9 US
$)u�Cherche kicad-cli.exe dans les emplacements d'installation Windows
courants, pour le cas fréquent où l'utilisateur n'a pas ajouté KiCad à
son PATH :
- installation "pour tous les utilisateurs" (admin) : Program Files
- installation "pour cet utilisateur seulement" (sans droits admin) :
  %LOCALAPPDATA%\Programs\KiCad — confirmé comme emplacement réel chez
  un utilisateur (C:\Users\...\AppData\Local\Programs\KiCad\10.0\bin).
z*C:\Program Files\KiCad\*\bin\kicad-cli.exez0C:\Program Files (x86)\KiCad\*\bin\kicad-cli.exe�LOCALAPPDATA�Programs�KiCad�*�binz
kicad-cli.exeNc�x�[RR[RR[RRU555n/nUR	S5HnUR[
U55 M  [U5$![a URS5 MKf=f)N�.r)	r�path�basename�dirname�split�append�int�
ValueError�tuple)r�version_str�parts�chunks    r�_version_key�-_find_windows_kicad_cli.<locals>._version_key>s����g�g�&�&�r�w�w���r�w�w���t�7L�'M�N���� �&�&�s�+�E�
 ����S��Z�(�,�
�U�|����
 ����Q��
 �s�1B�B9�8B9T)�key�reverser)r�str�returnr&)	rrrr#r�join�extend�glob�sort)�patterns�
local_appdata�
candidates�patternr*s     r�_find_windows_kicad_clir8"s���	6�;��H��J�J�N�N�>�2�M����������]�J���e�Ud�e�f��J������$�)�)�G�,�-������O�O��d�O�3��a�=�rc�V�Sn[RRU5(aU$S$)zCCherche kicad-cli dans l'emplacement d'installation macOS standard.z6/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cliN)rr�isfile�rs r�_find_macos_kicad_clir<Ls$��C�D��7�7�>�>�$�'�'�4�1�T�1rc��[R"S5nU(aU$SH+n[RR	U5(dM)Us $ g)u[Cherche l'exécutable flatpak, en repli sur les emplacements binaires
standards si shutil.which('flatpak') échoue.

Cas réel observé : flatpak est installé et fonctionne très bien dans un
terminal utilisateur, mais le plugin (lancé par KiCad, lui-même lancé
par l'environnement de bureau) hérite d'un PATH plus restreint qui
n'inclut pas le dossier où flatpak est installé — un problème
d'environnement de processus, pas d'installation. shutil.which() ne
peut pas trouver un binaire hors du PATH du processus courant, d'où ce
repli sur les emplacements universels des distributions Linux.�flatpak)z/usr/bin/flatpakz/usr/local/bin/flatpakz/bin/flatpakN)�shutil�whichrrr:)�foundrs  r�_find_flatpak_binaryrBRsB��
�L�L��#�E����N��
�7�7�>�>�$����K�O�rc��SH+n[RRU5(dM)Us $ [[R"S5SS9H+n[RRU5(dM)Us $ g)uCherche kicad-cli natif dans les emplacements d'installation Linux
courants, pour le même problème de PATH restreint que celui documenté
ci-dessus pour Flatpak : le plugin est lancé par KiCad, lui-même lancé
par l'environnement de bureau, qui peut hériter d'un PATH plus restreint
qu'un terminal utilisateur — shutil.which('kicad-cli') peut donc échouer
alors que KiCad est bel et bien installé nativement (paquet système,
AppImage extrait, Snap...).

Sans ce repli, resolve_kicad_cli() retombait directement sur la
commande Flatpak configurée par défaut dès que which('kicad-cli')
échouait — cassant tout sur une machine à l'installation native où
Flatpak/org.kicad.KiCad n'est pas installé, pour un simple souci de
PATH restreint plutôt qu'une réelle absence de KiCad.)z/usr/bin/kicad-cliz/usr/local/bin/kicad-cliz/snap/bin/kicad-cliz/opt/kicad*/bin/kicad-cliT)r-N)rrr:�sortedr2r;s r�_find_linux_kicad_clirEfsc��Z��
�7�7�>�>�$����K�Z��t�y�y�!<�=�t�L��
�7�7�>�>�$����K�M�rc��[R"5nUS:Xa[R"S5bS/$US:Xa[	5nU(aU/$US:Xa[
RnO'US:Xa[
RnO[
Rn[R"U5nUS:XaCU(a<USS:Xa3[R"S5c[5nU(a	U/USS-nU$U(aM[R"US5c3SnUS:Xa[5nOUS:Xa
[5nU(a	U/USS-nU$)	uRetourne la commande kicad-cli sous forme de liste de tokens.

IMPORTANT : sous Linux, KiCad peut être installé de plusieurs façons —
paquet natif de la distribution (kicad-cli alors directement dans le
PATH), Flatpak (nécessite "flatpak run --command=kicad-cli
org.kicad.KiCad", PLUSIEURS mots), AppImage, etc. Settings.render.KICAD_CLI_LINUX
suppose Flatpak par défaut, ce qui casse tout pour une install native —
cas réel observé ("flatpak introuvable dans le PATH" alors que KiCad
fonctionne très bien). On teste donc d'abord si 'kicad-cli' tout court
répond déjà (install native), et on ne retombe sur la commande
configurée (Flatpak par défaut) que si ce n'est pas le cas.

Pour le cas Flatpak, un DEUXIÈME souci d'environnement a aussi été
observé : flatpak est bien installé et fonctionne dans un terminal,
mais le plugin (lancé par KiCad, elle-même lancée par l'environnement
de bureau) hérite d'un PATH plus restreint qui ne l'inclut pas — voir
_find_flatpak_binary(), qui cherche aussi dans les emplacements
binaires standards des distributions, pas seulement via le PATH hérité.

Ce même problème de PATH restreint touche aussi le cas natif Linux :
voir _find_linux_kicad_cli(), utilisé en repli AVANT de retomber sur la
commande configurée (Flatpak par défaut), pour ne pas confondre un
simple souci de PATH sur une install native avec une absence réelle de
Flatpak.

subprocess.run() est appelé sans shell=True : il faut donc une vraie
liste d'arguments, pas une seule chaîne contenant des espaces.

Si la commande configurée n'est pas trouvable dans le PATH sur
Windows/macOS, on essaie aussi les emplacements d'installation par
défaut avant d'abandonner — cas fréquent : KiCad est installé mais son
dossier `bin` n'a pas été ajouté au PATH système.
�Linuxr
N�Windowsrr>��Darwin)�platform�systemr?r@rE�
render_cfgrr	r�shlexr"rBr8r<)rL�native_path�raw�tokens�flatpak_path�fallbacks      r�resolve_kicad_clirT}s%��D�_�_�
�F�
���V�\�\�+�6�B��}��
���,�-����=� �
����(�(��	�9�	��*�*���(�(��
�[�[��
�F�
���V��q�	�Y�(>�6�<�<�PY�CZ�Cb�+�-���"�^�f�Q�R�j�0�F��
�
�&�,�,�v�a�y�)�1����Y��.�0�H�
�x�
�,�.�H���Z�&���*�,�F��Mrc���[5nU(dgUSn[R"U5=(d( [RRU5=(a UnU(dE[R"5nUS:XaSnOUS:XaSnOSnSS	US
SRU5SU34$[R"US
/-SSSS9nURS:waLUR=(d SR!5SSnSSURSSRU5SU34$UR"=(d UR=(d SR!5=(d SnSSUSSRU534$![a$nSSSRU5SUS34sSnA$SnAf[Ra SSSRU534s$[anSSU34sSnA$SnAff=f)u�Vérifie que kicad-cli est bien accessible (exécutable trouvé + répond).

Returns:
    (ok, message) — message détaillé destiné à être affiché/loggé.
)Fz+Chemin kicad-cli vide dans Settings.render.rrHu�Sous Windows, vérifiez que KiCad est installé et que son dossier 'bin' (ex. C:\Program Files\KiCad\9.0\bin) est ajouté à la variable d'environnement PATH, puis redémarrez KiCad.rJuxSous macOS, vérifiez que KiCad est installé dans /Applications/KiCad et que son dossier Contents/MacOS est accessible.u�Sous Linux, ni 'kicad-cli' natif ni Flatpak n'ont été trouvés : si KiCad est installé nativement (paquet de la distribution, AppImage...), vérifiez que 'kicad-cli' est bien dans le PATH (essayez 'which kicad-cli' dans un terminal). Si KiCad est installé via Flatpak, vérifiez que 'flatpak' est installé et que 'org.kicad.KiCad' est bien enregistré (flatpak list | grep kicad).Fu(Exécutable introuvable dans le PATH : 'u'.
Commande configurée : � �
�versionT�
��capture_output�text�timeoutzCommande introuvable : z (�)Nu&kicad-cli ne répond pas après 10s : z#Erreur lors du test de kicad-cli : �i,u+kicad-cli a répondu avec une erreur (code z).
Commande : zversion inconnueukicad-cli OK — u
Commande utilisée : )rTr?r@rrr:rKrLr0�
subprocess�run�FileNotFoundError�TimeoutExpired�	Exception�
returncode�stderr�strip�stdout)	rQ�
executable�resolvedrL�hint�result�erfrXs	         r�check_kicad_clirn�s���
 �F��C����J��|�|�J�'�V�B�G�G�N�N�:�,F�,U�:�H�����"���Y��I�
�
�x�
�D�
�/�
��6�z�l�C&�&)�h�h�v�&6�%7�r��f�
�
�	
�@�����i�[� ����	
�����A���-�-�%�2�,�,�.�t��4���9�&�:K�:K�9L�M��(�(�6�*�+�2�f�X�
7�
�	
�
�}�}�3��
�
�3��:�:�<�R�@R�G��$�W�I�-D�S�X�X�f�EU�DV�W�W�W���I��/�����0@�/A��A�3�a�H�H�H���$�$�R��>�s�x�x��?O�>P�Q�Q�Q��@��;�A�3�?�?�?��@�s6�*E9�9
G+�F"�G+�"-G+�	G+�G&� G+�&G+c
��^�U4Sjn[R"USSUS9nUR
S:wagUR=(d UR=(d SR5S
SnU"SUSUR
SSRU5SU35 gg![a! U"SUSSRU5<35 g[Ra U"SUS	US
35 gf=f)u�Exécute une commande kicad-cli, capture stdout/stderr, reporte les
erreurs via `reporter` (tout objet avec des méthodes info/warning/error
— voir reporter.py). Si `reporter` est None, imprime sur stdout/stderr.
c�L>�TbTRU5 g[SU35 g)Nz	[ERREUR] )�error�print)�msg�reporters �r�
_report_error�run_cli.<locals>._report_errors$������N�N�3���I�c�U�#�$rTrZzkicad-cli introuvable (z). Commande : rVFukicad-cli ne répond pas (z, >zs).rr_Ni�zErreur rendu (u) — code z
.
Commande : rW)	r`rarbr0rcrerfrhrg)�cmd�descriptionrtr]rurlrfs  `    r�run_clirys����
%�	�����D�t�W�U�����A���-�-�6�6�=�=�6�B�=�=�?���E����[�M��V�5F�5F�4G�H��(�(�3�-���6�(�
4�	
����!���%�k�]�.����#��@Q�R�	
���$�$���2�;�-�s�7�)�3�O�P���s�B�(C'�"C'�&C'�__main__rI)r/z
str | None)r/z	list[str])r/ztuple[bool, str])r_N�<)rw�listrxr.r]r$r/�bool)�__doc__�
__future__rr2rrKrNr?r`�SettingsrrM�ImportErrorrr8r<rBrErTrnryr
�sys�_sys�_ok�_msgrr�exitrrr�<module>r�s����#��	���
��!�-�'�T2��(�.I�XBX�J�@�z����!�I�C��	�$�K��I�I�3�a�A����u�!�I�I�
��J�!�s�B�B �B