Command line interface - gropax/qres GitHub Wiki

Get resources from server:

$ qres get 123
$ qres get 1,2,3
$ seq 3 | qres get  # Read ids from stdin

Create resources on server:

$ qres new ~/my/file.txt
$ ls *.txt | qres new  # Create from stdin

Edit resources on server:

$ seq 3 | qres get | qres mod -f title,description --editor  # Edit fields in Vim
$ seq 3 | qres get | qres mod -f title,description -c 'mycmd -x'  # Modify using external command

Generic commands

Get resources using qget

Fetch an object using its location URL:

$ echo "http://boug.re/resources/1" | qget

Can fetch objects of different types, from different locations:

$ echo "http://boug.re/resources/1\nhttp://grou.be/tags/2" | qget

Can fetch objects from their ids. (Is it really useful, since we indentify them by their URL?)

$ qget res 123
$ seq 3 | qget res
$ qget res 123 | qmod -f title --editor

$ qget http://boug.re/resources/1 $ echo http://boug.re/resources/1 | qget $ qget -f title,id -d "\t"

La commande qmod permet d'éditer une collection d'object sous forme de CSV dans un éditeur de texte.

$ echo http://boug.re/resources/1 | qget | qmod --fields title --editor $ echo http://boug.re/resources/1 | qget | qmod --fields title --command 'mycmd %'

Si le champs n'existe pas, que faire :

  • retourner une erreur ?
    • si oui, comment editer des objects de type différents simultannément ?
    • si non, ne rien faire pour les objects concernés ?

On veut pouvoir editer simultannément des objects de types différents.

La stucture JSON retournée par le serveur décrit le contrat que doit respecter l'object :

  • on ne doit pas changer son format (retirer ou ajouter des champs)
  • tous les champs, même vides, doivent être retournés par le serveur
  • l'objet dans son entier doit être envoyer dans les requête PUT

Il faut distinguer les champs des relations :

  • dans le format JSON
  • dans la CLI. Cela permet entre autres choses de traiter des objets de types différents de la même façon. (S'il en était autrement, peut-être que "tags" ferait référence à un champs dans un objet, et à une relation dans un autre : on se retrouverait en sortie avec des objets JSON côte-à-côte avec des string.) $ qget # retourne l'objet $ qget --fields title # retourne des champs (CSV) $ qget --relation tags # retourne une collection d'objets (SelectMany)

Commande differente pour effectuer des requêtes sur des objets: $ qry

Commande qjoin pour exécuter une commande sur des groupes d'objets provenants d'une même expansion. $ ... | qget -r tags | qget -f name | qjoin tr "\n" "," sport,tennis,nadal cuisine,poulet ... Pour que cela fonctionne, chaque ligne doit contenir, en plus des données relatives à l'objet, des métas données concernant l'exécution en cours.

Possibilité d'accéder aux champs des sous objets:

$ qget -r tags.name
⚠️ **GitHub.com Fallback** ⚠️