PremierLangage / premierlangage

Server for auto-evaluating exercices
Other
18 stars 9 forks source link

les liens autoreferent sur un #46

Closed nimdanor closed 5 years ago

nimdanor commented 6 years ago

Le fichier suivant fait l'erreur suivante :

title= Essai de la version Aout 2018

text==
Ceci est un exercice de tests 
objectif : verifier les liens et les repository
dans les noms de liens.
==

# un fichier a ajouter

@ testversionAout.pl [autoreference.pl]

form=<p>Rien comme input </p>

l'erreur vient d'un probleme sur le calcul de repertoire de stockage :

Failed to load 'testversionAout.pl':

/home/dr/DJANGO/premierlangage/server/serverpl/1/python-pl-bank/testversionAout.pl at line 15 -- File not found : '/1/1/python-pl-bank/testversionAout.pl'
@ testversionAout.pl [autoreference.pl]
nimdanor commented 6 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]
qcoumes commented 6 years ago

Vous pouvez réessayer avec la dernière version de master ? Ça devrait marcher maintenant.

nimdanor commented 6 years ago

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
nimdanor commented 6 years ago

le repertoire n'est pas considere comme un repository. la fonction get_location devrait fonctionner partout = a condition qu'elle ai les bon parametres.

qcoumes commented 6 years ago

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?

nimdanor commented 6 years ago

[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.

qcoumes commented 6 years ago

Je viens de tester sur un autre ordinateur, et tout marche : screenshot from 2018-08-18 17-34-18

La commande git fetch ne vous retourne bien rien du tout ?

nimdanor commented 6 years ago

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$ 
nimdanor commented 6 years ago

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
qcoumes commented 6 years ago

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:

nimdanor commented 6 years ago

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]

nimdanor commented 6 years ago
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
nimdanor commented 6 years ago

Quand tu regarde le message d'erreur le repertoire est faux.

home/python-pl-bank/....
qcoumes commented 6 years ago

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:

Si l'utilisateur utilise un dossier autre que sont home, lib par exemple:

Pour résumé, si il y a rien ou home:, la plateforme va chercher dans home/[ID_user]

qcoumes commented 6 years ago
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.

qcoumes commented 6 years ago

Par contre, il semble que la regex des nom de fichier est incorrect, je regarde ça.

qcoumes commented 6 years ago

Le problème devrait être maintenant réglé

nimdanor commented 6 years ago

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.

nimdanor commented 6 years ago

je devrqi qrreter de pqs qvoir confience dqns le code ....

nimdanor commented 6 years ago

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.

qcoumes commented 6 years ago

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

nimdanor commented 6 years ago

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.

qcoumes commented 6 years ago

La syntaxe [dossier]: permettait d'avoir potentiellement d'autre dossier que lib justement.

Si je résume le tout.


Vous voudriez:

  1. Une référence absolue (ex: /chemin/vers/template.pl) va chercher dans le dossier/repository courant (ex /home/[id]/[dossier|repo courant]/chemin/vers/template.p)
  2. Une référence relative (ex: ../chemin/vers/template.pl) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p)
  3. 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)
  4. Si le fichier d'une référence absolue (voir 1.) n'est pas trouvé, je cherche dans home/lib/

Avantage:

Désavantage:

Problèmes :

Moi je proposais (fonctionnement actuelle):

  1. Une référence absolue (ex: /chemin/vers/template.pl) va chercher dans le home de l'utilsateur (ex /home/[id]/chemin/vers/template.p)
  2. Une référence relative (ex: ../chemin/vers/template.pl) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p)
  3. Une référence avec ':' (ex 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.

nimdanor commented 6 years ago

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

  1. 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.

  2. Une référence relative (ex: ../chemin/vers/template.pl) va chercher relativement à la position actuelle (ex [position]/../chemin/vers/template.p). comportement "naturel".

  3. 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 :

qcoumes commented 6 years ago

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.

qcoumes commented 6 years ago

Comme ça complique un peu l'écriture des chemins pour les profs, j'ai fait un Flowchart rapidement pour la documentation:

untitled diagram 2

Dites moi si tout vous semble correcte, je rajouterais ça à la documentation demain.

nimdanor commented 6 years ago

Cela me parait parfait.

qcoumes commented 6 years ago

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:

pathv1

nimdanor commented 6 years ago
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
qcoumes commented 6 years ago

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

plgitlogin commented 6 years ago

ok

plgitlogin commented 6 years ago

il est temps que je prenne des vacances ...

qcoumes commented 6 years ago

Je peux fermer cette issue ?

qcoumes commented 6 years ago

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 :

pathv3


Currently, we have this :

pathv2

So, which one should we use ?

@nimdanor @nborie @Pavell94000 @mciissee

Pavell94000 commented 5 years ago

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:

nimdanor commented 5 years ago

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.

qcoumes commented 5 years ago

Certains PL de la lib se servent de ~/.