Closed nimdanor closed 5 years ago
pas mieux avec un /
Failed to load 'testversionAout.pl':
/home/dr/DJANGO/premierlangage/server/serverpl/1/python-pl-bank/testversionAout.pl at line 15 -- File not found : '/1/testversionAout.pl'
@ /testversionAout.pl [autoreference.pl]
Vous pouvez réessayer avec la dernière version de master ? Ça devrait marcher maintenant.
Nouvelle version jutilise le repo http://github.com/nimdanor/python-pl-bank que je charge cher moi.
×
Failed to load 'semaine1.pltp':
home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 72 -- PL not found : 'home/concept/variable/valeur.pl'
@ /concept/variable/valeur.pl
DEBUG set to True - Showing Traceback :
Traceback (most recent call last):
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 42, in load_file
return load_PLTP(directory, rel_path, force)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 82, in load_PLTP
dic, warnings = parse_file(directory, rel_path, path)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parser.py", line 137, in parse_file
dic, warnings = parsers[ext]['parser'](directory, path).parse()
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 335, in parse
self.parse_line(line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 311, in parse_line
self.pl_file_line_match(self.PL_FILE_LINE.match(line), line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 283, in pl_file_line_match
raise FileNotFound(join(self.directory.root, self.path), line, join(directory.name, path), self.lineno, "PL not found")
loader.exceptions.FileNotFound: home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 72 -- PL not found : 'home/concept/variable/valeur.pl'
@ /concept/variable/valeur.pl
le repertoire n'est pas considere comme un repository. la fonction get_location devrait fonctionner partout = a condition qu'elle ai les bon parametres.
Tout marche très bien chez moi avec le même PLTP (à part une erreur de syntaxe du pl du à un problème - maintenant réglé - avec la regex).
get_location marche très bien et le repository est bien reconnue comme un repo github. Vous êtes bien sur la dernière version de master?
[remote "origin"] url = https://github.com/plgitlogin/premierlangage/ fetch = +refs/heads/:refs/remotes/origin/
Script started on 2018-08-18 10:08:53+0200
dr@nungesser:~/DJANGO/premierlangage/server/serverpl$ source ../../env/bin/activate
(env) dr@nungesser:~/DJANGO/premierlangage/server/serverpl$ ./run
Performing system checks...
System check identified no issues (0 silenced).
August 18, 2018 - 10:09:27
Django version 2.1, using settings 'serverpl.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
LE CHEMIN concept/variable/valeur.pl
[2018/08/18 10:09:47] INFO -- "GET /filebrowser/home/python-pl-bank/AP1-1819/semaine1/opt/?option=entry-direct-load&target=semaine1.pltp HTTP/1.1" 302 0
[2018/08/18 10:09:47] INFO -- "GET /filebrowser/home/python-pl-bank/AP1-1819/semaine1/ HTTP/1.1" 200 61796
^C(env) dr@nungesser:~/DJANGO/premierlangage/server/serverpl$ exit
exit
Script done on 2018-08-18 10:10:55+0200
Script started on 2018-08-18 10:11:37+0200
dr@nungesser:~/DJANGO/premierlangage/server/serverpl$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: run
Untracked files:
(use "git add <file>..." to include in what will be committed)
../../env/
debug
filebrowser/migrations/0002_auto_20180814_1233.py
filebrowser/migrations/0003_merge_20180817_1738.py
static/
no changes added to commit (use "git add" and/or "git commit -a")
dr@nungesser:~/DJANGO/premierlangage/server/serverpl$ exit
exit
Script done on 2018-08-18 10:11:55+0200
ne fonctionne pas.
Je viens de tester sur un autre ordinateur, et tout marche :
La commande git fetch
ne vous retourne bien rien du tout ?
Je viens de tester des trucs dans lib ca marche je comprend pas pourquoi python-pl-bank ne fonctionne pas.
(env36) dr@nungesser:~/DJANGO/premierlangage/home/1/python-pl-bank$ git fetch
(env36) dr@nungesser:~/DJANGO/premierlangage/home/1/python-pl-bank$ cd ../..
(env36) dr@nungesser:~/DJANGO/premierlangage/home$ cd ..
(env36) dr@nungesser:~/DJANGO/premierlangage$ git fetch
(env36) dr@nungesser:~/DJANGO/premierlangage$
j'ai charger le repository dans un utilisateur pas administrateur (dr). ET ca marche !! mais comme le fichier a une mauvaise syntaxe il n'y a aucun exercice de charge. Donc pas d'erreur.
Si je modifie la syntaxe : avec @ concept/variable/valeur.pl ca ne marche pas car la variable directory de get_postion est mauvaise ... non ?
Failed to load 'semaine1.pltp':
home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 71 -- PL not found : 'home/python-pl-bank/AP1-1819/semaine1/concept/variable/valeur.pl'
@ concept/variable/valeur.pl
DEBUG set to True - Showing Traceback :
Traceback (most recent call last):
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 42, in load_file
return load_PLTP(directory, rel_path, force)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 82, in load_PLTP
dic, warnings = parse_file(directory, rel_path, path)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parser.py", line 137, in parse_file
dic, warnings = parsers[ext]['parser'](directory, path).parse()
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 334, in parse
self.parse_line(line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 310, in parse_line
self.pl_file_line_match(self.PL_FILE_LINE.match(line), line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 282, in pl_file_line_match
raise FileNotFound(join(self.directory.root, self.path), line, join(directory.name, path), self.lineno, "PL not found")
loader.exceptions.FileNotFound: home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 71 -- PL not found : 'home/python-pl-bank/AP1-1819/semaine1/concept/variable/valeur.pl'
@ concept/variable/valeur.pl
Effectivement, c'est étrange que cela marche pas avec amdin mais fonctionne avec d'autre utilisateur.
Le fichier n'est pas trouvé sans le '/' au début car le chemin est interprété comme relatif, or le pltp est dans le dossier python-pl-bank/AP1-1819/semaine1/
et le fichier python-pl-bank/AP1-1819/semaine1/concept/variable/valeur.pl
n'existe donc pas.
Les chemins valides sont donc:
/python-pl-bank/concept/variable/valeur.pl
home:/python-pl-bank/concept/variable/valeur.pl
../../concept/variable/valeur.pl
Donc il n'y a plus la reference @ /concept/xx.pl qui est par rapport au repository local et qui est transforme en home/6/nondurepo/concept/xx.pl pour l'utilsateur 6 ce qui permet d'avoir plusieurs nom pour l'import d'un repo .... et que ces imports se elange pas en utilisnt des references relatives....
cela veux dire que l'on est oblige de faire @ ../../concept/xx.pl ce qui n'est pas tres commode
[desole clavier qwerty]
Failed to load 'semaine1.pltp':
home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 71 -- PL not found : 'home/python-pl-bank/concept/variable/valeur.pl'
@ ../../concept/variable/valeur.pl
DEBUG set to True - Showing Traceback :
Traceback (most recent call last):
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 42, in load_file
return load_PLTP(directory, rel_path, force)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/loader.py", line 82, in load_PLTP
dic, warnings = parse_file(directory, rel_path, path)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parser.py", line 137, in parse_file
dic, warnings = parsers[ext]['parser'](directory, path).parse()
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 334, in parse
self.parse_line(line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 310, in parse_line
self.pl_file_line_match(self.PL_FILE_LINE.match(line), line)
File "/home/dr/DJANGO/premierlangage/server/serverpl/loader/parsers/pltp.py", line 282, in pl_file_line_match
raise FileNotFound(join(self.directory.root, self.path), line, join(directory.name, path), self.lineno, "PL not found")
loader.exceptions.FileNotFound: home/python-pl-bank/AP1-1819/semaine1/semaine1.pltp at line 71 -- PL not found : 'home/python-pl-bank/concept/variable/valeur.pl'
@ ../../concept/variable/valeur.pl
Quand tu regarde le message d'erreur le repertoire est faux.
home/python-pl-bank/....
Non, le home
que voit l'utilisateur correspond a premierlangage/home/[ID_user]
.
Quand utilisateur utilise un chemin absolu, la plateforme va chercher dans dans home/[ID_user]
, mais le chemin affiché sur les message de debug est juste home
, car l'utilisateur ne voit le dossier [ID_user]
à aucun moment sur l'interface du filebrowser.
Le fichier n'est pas trouvé car il s'appelle valeurs.pl
et non valeur.pl
(il y a un s).
Les chemins sont donc convertis:
/python-pl-bank/concept/variable/valeurs.pl
-> home/[ID_user]/python-pl-bank/concept/variable/valeurs.pl
home:/python-pl-bank/concept/variable/valeurs.pl
-> home/[ID_user]/python-pl-bank/concept/variable/valeurs.pl
home/[ID_user]/python-pl-bank/AP1-1819/semaine1/../../concept/variable/valeurs.pl
Si l'utilisateur utilise un dossier autre que sont home, lib par exemple:
lib:/python-pl-bank/concept/variable/valeurs.pl
-> home/lib/python-pl-bank/concept/variable/valeurs.pl
Pour résumé, si il y a rien ou home:
, la plateforme va chercher dans home/[ID_user]
Donc il n'y a plus la reference
@ /concept/xx.pl
qui est par rapport au repository local et qui est transforme en
home/6/nondurepo/concept/xx.pl
pour l'utilsateur 6 ce qui permet d'avoir plusieurs nom pour l'import d'un repo .... et que ces imports se elange pas en utilisnt des references relatives....
cela veux dire que l'on est oblige de faire
@ ../../concept/xx.pl
ce qui n'est pas tres commode
Pour peu que l'utilisateur import sont répo à la racine de son home et ne change pas le nom de celui-ci quand il clone, il peut nommer ses références [nom_du_repo]/chemin/vers/pl.pl
Le problème de faire correpondre une référence absolue au répo courant est qu'il faut encore une nouvelle syntaxe pour aller chercher des fichiers en dehors de ce même répo ou même dans lib.
Par contre, il semble que la regex des nom de fichier est incorrect, je regarde ça.
Le problème devrait être maintenant réglé
Et pourtant j'ai des lunettes. Merci Quentin.
Le problème de faire correpondre une référence absolue au répo courant est qu'il faut encore une nouvelle syntaxe pour aller chercher des fichiers en dehors de ce même répo ou même dans lib.
IL faut limiter la copie des repo git externe a certaines conditions: 1) a la racine du home de l’utilisateur 2) pas de possibilité de changer le nom pour que la syntaxe soit correct.
je devrqi qrreter de pqs qvoir confience dqns le code ....
je trouve que home:/ref.pl a pas beaucoup d'interet non ? je pensais plus tot a python-pl-bank:concept/valeurs/toto.pl
Le fait que les reference /toto dans un repo ne sont plus liees a la racine du repo c'est pas terrible. toute la syntaxe des liens dans python-pl-bank est a revoir et je doit mettre des ../../../ partout ce qui n'est pas tres lisible ni commode ni agreable.
Mais si les deux conditions :
IL faut limiter la copie des repo git externe a certaines conditions:
1. a la racine du home de l’utilisateur
2. pas de possibilité de changer le nom pour que la syntaxe soit correct.
Sont respectés, toutes les références commençant par /[nom_du_repo]/[...]
dans un repo seront valide sur PL, par exemple /python-pl-bank/concept/variable/valeurs.pl
Le problème d'utiliser [nom_du_repo]:/path/vers/file
est que ça rentre conflit avec la syntaxe des librairie PL, ex: lib:/path/vers/file
Oui mais c'est idiot pour le développeur des exercices dans un repo ( qui est l'acteur principal ici). Tu ne veux pas avoir a mettre des ref2rences relatives et absolues (il faut les deux !!!) partout genre : ../../../concept/functions/exo1.pl qui est une ref2rence relative et absolue
je ne comprend pas ce qu apporte la syntaxe lib: pour moi lib devrait 'etre' quelque chose comme :
ainsi si j'ai une r2ference template=/template/untemplate.pl dans un fichier de mon repo toto cela donne le truc suivant je cherche si home/id/toto/template/untemplate.pl existe et si non je regarde si home/lib/template/untemplate.pl existe et si non je dit pas trouve Si je suis dans un autre repo que toto je doit écrire template=toto:/template/untemplate.pl alors home/id/toto/template/untemplate.pl existe et si non je dit pas trouve
On trouvera une autre syntaxe pour les nouvelles lib.Si elles existent .... Partons plus tôt sur une syntaxe dans le repos ou dans le repos d'un autre que l'on ne souhaite pas cloner alors on fait une dépendance que l'on met dans son répertoire perso.
La syntaxe [dossier]:
permettait d'avoir potentiellement d'autre dossier que lib justement.
Si je résume le tout.
Vous voudriez:
/chemin/vers/template.pl
) va chercher dans le dossier/repository courant (ex /home/[id]/[dossier|repo courant]/chemin/vers/template.p
)../chemin/vers/template.pl
) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p
)mon_repo:/chemin/vers/template.pl
) va chercher dans /home/[id]/[dossier]
(ex: home/[id]/mon_repo/chemin/vers/template.pl
)home/lib/
Avantage:
Désavantage:
Problèmes :
/home/[id]/template.pl
), je ne peux plus le référencer de manière absolue.Moi je proposais (fonctionnement actuelle):
/chemin/vers/template.pl
) va chercher dans le home de l'utilsateur (ex /home/[id]/chemin/vers/template.p
)../chemin/vers/template.pl
) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p
)dir:/chemin/vers/template.pl
) va chercher dans home/[dossier]/ (ex: home/dir/chemin/vers/template.pl
), un dossier avec un nom entier (123:
) renvoyant une erreur de syntaxe pour éviter d'accéder au dossier des autres utilisateurs.Désavantage:
Ça ne me dérange pas de faire votre solution, mais il me faut ajouter quelque chose à la syntax afin de pouvoir référencer les fichiers directement dans home/[id]/
.
Je vous laisse choisir.
La syntaxe [dossier]:
permettait d'avoir potentiellement d'autre dossier que lib justement.
Rien n’empêche d'en avoir plusieurs: il suffit qu'on les test un par un comme la liste des repertoire des include en C ou la liste des repertoires du bash PATH. Cela cout pas grand chose de tester plusieurs repertoires avant.
En RESUME
Une référence absolue (ex: /chemin/vers/template.pl
) va chercher si on est dans un repo dans le dossier/repository courant (ex /home/[id]/[dossier|repo courant]/chemin/vers/template.p
)
sinon pas dans un repo accès classique a partir de home/id "home/id/chemin/vers/template.pl"
Dans les deux cas si pas trouvee va chercher dans les librairies : hom/lib et les futures.
Une référence relative (ex: ../chemin/vers/template.pl
) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p
).
comportement "naturel".
Une référence avec ':' (ex mon_repo:/chemin/vers/template.pl
) va chercher dans /home/[id]/[dossier]
(ex: home/[id]/mon_repo/chemin/vers/template.pl
),
oui.
Avantage:
Désavantage:
Problèmes :
/home/[id]/template.pl
), je ne peux plus le référencer de manière absolue.
je propose d'utiliser 'home:' mais normalement un utilisateur ne devrait pas faire cela (mauvais karma utilise un truc pas dans git .....). Il faudra donc ne pas avoir de fichiers de même nom dans les différentes libs.
Ça va faire beaucoup de cas particulier, je ferais ça demain.
Comme ça complique un peu l'écriture des chemins pour les profs, j'ai fait un Flowchart rapidement pour la documentation:
Dites moi si tout vous semble correcte, je rajouterais ça à la documentation demain.
Cela me parait parfait.
J'ai pushé tout ça sur master, si vous voulez tester.
Maintenant faudra bien faire attention à où on se trouve pour écrire les chemins. Pour comparer, avant c'était ça:
Failed to load 'calculmystere.pl':
home/python-pl-bank/concept/value/calculmystere.pl at line 38 -- File not found : 'home/lib/forms/simplenumeric.html'
form=@ lib:/forms/simplenumeric.html
pourtant
(env) dr@nungesser:~/DJANGO/premierlangage$ ls home/lib/forms/simplenumeric.html
home/lib/forms/simplenumeric.html
En se basant sur:
nimdanor commented 5 days ago
Une référence absolue (ex: /chemin/vers/template.pl) va chercher si on est dans un repo dans le dossier/repository courant (ex /home/[id]/[dossier|repo courant]/chemin/vers/template.p) sinon pas dans un repo accès classique a partir de home/id "home/id/chemin/vers/template.pl" Dans les deux cas si pas trouvee va chercher dans les librairies : hom/lib et les futures.
Le chemin correct est: /forms/simplenumeric.html
Le chemin lib:/forms/simplenumeric.html
va chercher dans home/[id]/lib/forms/simplenumeric.html
ok
il est temps que je prenne des vacances ...
Je peux fermer cette issue ?
After noticing @Pavell94000 having some difficulty understanding on paths work inside a PL, I've tried to come up with yet another way of doing it, while preserving the possibility to reference a file from the current repository's root :
Currently, we have this :
So, which one should we use ?
@nimdanor @nborie @Pavell94000 @mciissee
Nous avons simplifié le get_location puisque nous n'avons plus de dossier personnels, ni de sous-repo git pour pouvoir avoir le repo Yggdrasil comme dossier home et le remonter à la racine en parallèle de la lib.
Désormais, nous avons:
/
Qui permet d'écrire un chemin a partir de Yggdrasil, ou dans la lib si le fichier n'est pas dans Yggdrasil. Par exemple : /ComputerScience/C/template/stdsandboxC.pl
~/
qui permet d'écrire un chemin a partir du dossier courant (donc la lib ou Yggdrasil suivant le dossier courant.)
:
qui permet de référencer une librairie, par exemple lib:/template/python.pl
Pourquoi faites vous quelque chose de compliqué ! si cela commence par / c'est soit yggdrasil (soit en cas d'échec dans lib). sinon c'est ./ et donc c'est par rapport au fichier.
Certains PL de la lib se servent de ~/
.
Le fichier suivant fait l'erreur suivante :
l'erreur vient d'un probleme sur le calcul de repertoire de stockage :