PrimTux, la distribution éducative

Version complète : PrimtuxStore
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Pour avoir un dev suivi sur ce projet, je crée cette nouvelle discussion.

Pour testé le primtuxStore (une ébauche pour l'instant) : https://framagit.org/mothsart/primtuxstore

Il faut au préalable installer "python-apt". (donc apt-get install python-apt)
Il y a aussi python-yaml (comme les handymenus)

Pour le lancer, on fait :

python store.py (ou ./store.py)

Celui-ci va charger le fichier conf.yaml, créer une ligne pour chaque app détecté, regarder si le soft est installé (apt-get cache au lancement et apt-cache search à chaque ligne grosso modo).
Si est installé, on peut le tester.

L'édition du fichier conf.yaml permet de compléter la liste.
Je n'ai pas de création de ligne et il ne détecte que gcompris (mais il ne voit pas l'exécutable) et firefox (là tout est bon), sinon dans l'idée c'est ça! Les images ne sont pas redimensionnées.
Steph a écrit :Je n'ai pas de création de ligne et il ne détecte que gcompris (mais il ne voit pas l'exécutable) et firefox (là tout est bon)

Euh, oui. C'est un peu le principe : il ne va afficher que les entrées dans le fichier conf.yaml
A la rigueur, je peux essayé d'en créer le max avec un script de conversion provenant des handymenus.
Mais faudra quand même faire le tri, rajouter des images etc.

Pas de création de ligne : ah, tu voulais un store "éditable" ?
Pour l'instant, le faire à la main dans le fichier conf.yaml, c'est suffisant, non ?
L'utilisateur final veut un truc à consulter, non ?


Qu'entends-tu par redimensionnement ? Que les image soient responsives ?
Le mieux seraient de toute façon de donner une taille standart pour pas avoir de surprises.
Laisse tomber j'avais lu "va changer le fichier de conf" au lieu de "va charger". Oui pour les icones.
Quelques news : j'ai finalement migré l'applicatif pour utiliser une base de donnée sqlite : ça sera plus facile de faire de la recherche, de la pagination etc.
J'ai également créé un script d'import qui va alimenter la base en se basant sur les diff fichiers yaml des session.
Y'a encore quelques petits retouches (notamment sur les images) mais ça devrait être prêt ce week-end.

Steph : je te donnerais les détails pour utiliser l'import. Le mieux est d'avoir une Primtux avec le max de softs d'installé sur les handymenus.
Une fois en place, le soft d'import fera le reste.
Il sera possible de lancer l'import à plusieurs reprises : c'est "normalement" (d'expérience, c'est toujours un peu capricieux ce genre d'import) assez intelligent pour n'ajouter que les choses qu'il n'a pas encore dans sa base.

Une fois cet import de passé, il faudra se concentrer sur :
- les quelques softs qui n'ont pas passé l'import
- le mode "recherche"
- la pagination
Voilà, j'ai créé une première version du script d'import.
ça nécessite la lib yaml et pillow. (apt-get install python3-pil python3-yaml)

Le mieux, pour tester :

Code :
git clone git@framagit.org:mothsart/primtuxstore.git
cd primtuxstore
./create_db // crée la base de donnée à la racine : dans le fichier prmtuxstore.db

Puis :
Code :
./import

Ce dernier va, à partir des fichiers yaml, crée les entrées en base, rapatrier les images dans un dossier "assets" et effectuer un traitement pour qu'elles fassent toutes la même tailles et soit au format png (les jpeg sont convertis en png) ou svg.

Une fois, ces opérations effectués, on peut tester le résultat avec un :
Code :
./primtuxstore
La pagination est désormais en place.
Je vais me concentrer désormais sur le moteur de recherche.
Je pense que je vais également améliorer l'import pour qu'il se base sur les fichiers desktop et en récupère le max de données. (les mots clés notamment)

Y'a encore des petits soucis de mis en page mais je traiterais ça à la fin.
J'ai ça à l'import:

Code :
$ ./create_db
DROP TABLES
CREATE TABLES
$ ./import
Traceback (most recent call last):
  File "./import", line 84, in <module>
    session
  File "./import", line 70, in import_session
    import_apps(sessions, db, s['apps'], session)
  File "./import", line 56, in import_apps
    'in_%s' % session
  File "./import", line 38, in import_app
    app_exist = db.app_exist(name, sessions, session)
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 45, in app_exist
    name
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 15, in _exec
    result = self.db.execute(request)
sqlite3.OperationalError: no such table: results
Hum, c'est étonnant.
Après le ./create_db, tu as bien un fichier primtuxstore.db de créé ?
Là, il n'accède pas à la table sql et je ne vois que 2 cas possibles : pas de fichier de base de donnée (ou pas les droits nécessaires) ou le create_db n'a pas fait son job. (ce qui me semble très improbable)
J'ai mis à jour le code pour avoir un mode verbeux.
Peux-tu me donner le résultat de :
Code :
./create_db --verbose
On parle bien d'une exécution en user, pas en root? J'ai le même message et pas de primtuxstore.db dans le répertoire.
Ah oui, en espace utilisateur ça devrait passer très bien.
J'avais un soucis sur ma branche donc un pull pour récupérer le mode verbeux.

Je pense que c'est un soucis de dépendance : sqlite3 ou python-sqlite manquant... (mais si c'est ça, je trouve bizarre que l'erreur soit aussi silencieuse) si vraiment ça ne passe pas, il va falloir que je teste sur une primtux fraiche.
Sur une primtux4, il me manquait "python3-pil" et "python3-yaml".
Bon, je suis embêté.

Vu que je suis arrivé à l'installer sans soucis sur l'ordi de ma fille (et qu'il y avait sans doute pas mal de libs), je me suis installé une Primtux 5 toute fraîche dans une VM :

Code :
$ uname -a
Linux primtux 5.0.0-31-generic #33~18.0.4.1-Ubuntu SMP Tue Oct 1 10:20:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


Je me suis basé sur la dernière iso sur sourceforge et j'ai eu aucun blocage.

j'ai fait

Code :
$ cd /home/administrateur
$ git clone https://framagit.org/mothsart/primtuxstore.git
$ cd primtuxstore
$ ./create_db --verbose

ma base de donnée était bien créé :
Code :
$ ls  | grep primtuxstore.db
primtuxstore.db

et du coup, pas de soucis d'import :
Code :
./import

Même pas eu besoin d'installer "python3-yaml" ! c'est à n'y rien comprendre...
Alors avec le git clone ça fonctionne mais si je clone en téléchargeant en zip la base n'est pas créée, c'est ça qui est étrange.
Une fois démarré, j'ai les boutons "installer" qui sont actifs pour les applis installées, c'est pas "tester" qui devrait être actif?
Avec la commande dpkg-buildpackage -us -uc on a une erreur de chemin, corrigeable dans /debian/primtuxstore.install en mettant pstore à la place de store.
Mais en fait il est passé où create_db ? On dirait qu'il n'y a que des .py dans le deb.
Bon, je comprend le pourquoi du comment :
Le soft ne marche pour l'instant qu'en mode "debug" et ce mode s'appuie sur la présence d'un dossier ".git"... or avec l'archive, ce dossier n'existe pas et patatra.

Sur la partie packaging, j'ai pas mis la charrue avant les boeufs et c'est juste un squelette mais ça ne fonctionne pas encore.
Pour l'instant, c'est en plein dev, c'est un peu hatif de se concentrer dessus : le but c'est que tu es un aperçu et qu'on puisse travailler ensemble sur l'aspect "contenu" et fonctionnalités. Une fois ces points en place, je me concentrerais sur stabiliser et packager.

De plus, j'aimerais que le .deb intègre directement la base de donnée "alimentée". (le script de création et d'import, c'est juste pour nous simplifier la vie mais ça n'a pas vocation a être présent chez l'utilisateur final)
Du coup, le create_db et l'import ne seront pas présent sur le .deb final.
Compris! Smile
Je viens d'améliorer le script d'import.

Il arrive désormais, à partir des entrées du handymenu à retrouver le
nom du paquet correspond (grâce à ça, il est capable de savoir si
l'applicatif est installé ou non), le fichier .desktop et de ce fait les
mots clés rattachés.
Alors, il fait : c'est bien grand mot car les handymenus ne disposent
tout simplement pas de suffisamment d'info pour tout remonter facilement.
Je suis obligé de récup la commande lancé, de faire un "which" dessus
pour ne pas prendre en compte les éventuels alias, supprimer les
arguments puis j'identifie via dpkg quel paquet
contient cette commande de lancement.
Une fois le nom de ce paquet récupéré, je fais ressortir les .desktop
(certains en ont plusieurs) pour n'en sélectionner qu'un (celui qui a le
bon lanceur) et j'enregistre les mots clés correspondants.
Bref, c'était pas de la tarte et y'a sans doute des cas ou il ne s'en
sort pas.

Ce script alimente donc la base de donnée et peut se lancer plusieurs
fois sans rajouter de doublons (enfin, ça c'est la théorie. Si ils y en
a, il faut tout de suite me le préciser pour que j'identifie pourquoi) :
il ne va rajouter que les nouvelles entrées présent dans les handymenus.

Voilà, ça devrait néanmoins bien nous simplifier la tâche.

Steph, est-ce que tu pourrais alimenter cet import avec des handymenus
chargés à toque : toutes les sessions + app non libres + paquets en
cours d'intégration dans la PTX6 ?

Code :
./create_db // on re-crée la base de zéro
./import

En parallèle, je vais mettre au point le petit moteur de recherche pour
qu'il tienne partie de ces futures nouvelles données.
Voilà, ça avance.

L'auto-complete n'est pas encore parfait mais après l'import c'est utilisable. (et couplé avec la pagination)

Pour tester, il suffit de récupérer les dernières sources (git pull) et de lancer le store :

Code :
./primtuxstore
J'ai fait un premier jet pour l'installation.
Pour ça, il faut lancer le soft avec les droits root :

Code :
gksu ./primtuxstore

Pour l'instant, ça fige l'interface pendant que le soft est installé et on a pas vraiment de visibilité sur l'état d'avancement mais c'est toujours ça.

Bref, une fois qu'on aura suffisamment de données, je pourrais sans doute tagger le soft en version 0.1 : c'est à mon sens, fonctionnel.
Bon alors voilà:

Code :
$ ./create_db
DROP TABLES
CREATE TABLES
$ ./import
Traceback (most recent call last):
  File "./import", line 156, in <module>
    session
  File "./import", line 142, in import_session
    import_apps(sessions, db, s['apps'], session)
  File "./import", line 128, in import_apps
    'in_%s' % session
  File "./import", line 95, in import_app
    app_exist = db.app_exist(name, sessions, session)
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 75, in app_exist
    name
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 23, in _exec
    result = self.db.execute(request)
sqlite3.OperationalError: no such table: results
$ ./primtuxstore
Traceback (most recent call last):
  File "./primtuxstore", line 6, in <module>
    main()
  File "/home/administrateur/primtuxstore-master/pstore/store.py", line 85, in main
    win = StoreWindow(Conf(), cache)
  File "/home/administrateur/primtuxstore-master/pstore/store.py", line 72, in __init__
    pagination_widget
  File "/home/administrateur/primtuxstore-master/pstore/gui/app.py", line 131, in update_softs
    nb_results = db.count_results(value)
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 43, in count_results
    '''
  File "/home/administrateur/primtuxstore-master/pstore/lib/request.py", line 23, in _exec
    result = self.db.execute(request)
sqlite3.OperationalError: no such table: results
$
J'ai pas trop compris pourquoi tu recréais la base que je venais d'alimenter.
Le mieux, repart sur un dépôt propre et fait seulement :
Code :
./primtuxstore

et je pense qu'à tout les coup, tu pars de l'archives et pas de git, non ?
oui je n'aai pas installé git sur PrimTux, je vais le mettre.
Pages : 1 2