
Ce projet a été créé en appréciation pour la conception du texton, la lisibilité des requêtes de Yamlpath, l'utilité des CATTR et la joie de Plumbum et Ward - dont aucun n'est les projets de cet auteur.
Ce projet, NeedTextTo, fournit six outils de ligne de commande pour une conversion pratique entre le texte niché et d'autres formats:
nt2json , nt2toml , nt2yamljson2nt , toml2nt , yaml2ntÀ partir des documents de textes niché, avec l'accent ajouté:
NeedText est un format de fichier pour la maintenance de données structurées à saisir, édité ou visualisé par les personnes. Il organise les données dans une collection imbriquée de dictionnaires , de listes et de chaînes sans avoir besoin de citer ou de s'échapper . Une fonctionnalité unique de ce format de fichier est qu'elle ne prend en charge qu'un seul type scalaire: chaînes . Bien que la décision d'éviter les types entiers, réels, de date, etc. puisse sembler contre-intuitive, il conduit à des fichiers de données et des applications plus simples plus robustes.
Lors de la conversion du texte ni des formats prenant en charge plus de types de valeur, toutes les valeurs simples seront par défaut. Mais vous pouvez fournir des options pour lancer toutes les valeurs en tant que nombres, booléens, nuls ou dates / heures, si le format cible le prend en charge, en utilisant la syntaxe de requête du chemin YAML puissante et concise.
$ cat example.nt people :
-
name : Bill Sky
problems : 99
happy : False
-
name : Vorbis Florbis
problems : 6
happy : yes $ nt2json example.nt --number /people/problems --boolean /people/happy {
"people" : [
{
"name" : " Bill Sky " ,
"problems" : 99 ,
"happy" : false
},
{
"name" : " Vorbis Florbis " ,
"problems" : 6 ,
"happy" : true
}
]
}Vous pouvez plutôt stocker ces mappages de type dans un fichier "schéma" en texte bizarre.
$ cat example.types.nt boolean :
- /people/happy
number :
- /people/problemsLa commande suivante donnera alors également le JSON ci-dessus:
$ nt2json example.nt --schema example.types.ntUn tel schéma peut être généré automatiquement à partir de JSON / TOML / YAML:
$ json2nt --to-schema example.jsonDes options peuvent être fournies avant ou après le document et le contenu peut être tué directement sur la commande au lieu de spécifier un fichier.
Pour plus d'informations sur la syntaxe du chemin YAML, consultez le wiki de chemin YAML.
Par exemple, vous pouvez correspondre à tous les éléments qui sont probablement destinés à des booléens, à n'importe quelle profondeur, avec --boolean '/**[.=~/^(?i)(yes|no|true|false)$/]'
Si vous n'avez pas besoin de support TOML, vous pouvez omettre les bits [toml] ci-dessous.
Voici quelques façons de l'installer:
$ uv tool install ' nt2[toml] ' # Install using uv (Python all-around manager)
$ pipx install ' nt2[toml] ' # Install using pipx (Python app manager)
$ pipz install ' nt2[toml] ' # Install using zpy (Python app and environment manager for Zsh)
$ pip install --user ' nt2[toml] ' # Install in your user's environment
$ pip install ' nt2[toml] ' # Install in current environment Je recommande d'utiliser UV, PIPX ou pipz de ZPY.
Pour l'achèvement de Zsh, ajoutez cette ligne à votre .zshrc , à tout moment après compinit :
if (( $ + functions[compdef] )) && (( $ + commands[nt 2 json] )) compdef _gnu_generic nt2yaml nt2toml nt2json json2nt toml2nt yaml2nt nt2json 0.2.7
Read NestedText and output its content as JSON.
By default, generated JSON values will only contain strings, arrays, and maps,
but you can cast nodes matching YAML Paths to boolean, null, or number.
Casting switches may be before or after file arguments.
Examples:
nt2json example.nt
nt2json <example.nt
cat example.nt | nt2json
nt2json --int People.age --boolean 'People."is a wizard"' example.nt
Usage:
nt2json [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--boolean, -b YAMLPATH:str Cast each node matching the given YAML Path
query as boolean; may be given multiple
times
--null, -n YAMLPATH:str Cast each node matching the given YAML Path
query as null, if it is an empty string; may
be given multiple times
--number, --int, --float, -i, -f YAMLPATH:str
Cast each node matching the given YAML Path
query as a number; may be given multiple
times
--schema, -s NESTEDTEXTFILE:ExistingFile
Cast nodes matching YAML Path queries
specified in a NestedText document. It must
be a map with one or more of the keys:
'null', 'boolean', 'number'Each key's value
is a list of YAML Paths.; may be given
multiple times
nt2yaml 0.2.7
Read NestedText and output its content as YAML.
By default, generated YAML values will only contain strings, arrays, and maps,
but you can cast nodes matching YAML Paths to boolean, null, number, or date.
Casting switches may be before or after file arguments.
Examples:
nt2yaml example.nt
nt2yaml <example.nt
cat example.nt | nt2yaml
nt2yaml --int People.age --boolean 'People."is a wizard"' example.nt
Usage:
nt2yaml [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--boolean, -b YAMLPATH:str Cast each node matching the given YAML Path
query as boolean; may be given multiple
times
--date, -d YAMLPATH:str Cast each node matching the given YAML Path
query as a date, assuming it's ISO 8601; may
be given multiple times
--null, -n YAMLPATH:str Cast each node matching the given YAML Path
query as null, if it is an empty string; may
be given multiple times
--number, --int, --float, -i, -f YAMLPATH:str
Cast each node matching the given YAML Path
query as a number; may be given multiple
times
--schema, -s NESTEDTEXTFILE:ExistingFile
Cast nodes matching YAML Path queries
specified in a NestedText document. It must
be a map with one or more of the keys:
'null', 'boolean', 'number'Each key's value
is a list of YAML Paths.; may be given
multiple times
nt2toml 0.2.7
Read NestedText and output its content as TOML.
By default, generated TOML values will only contain strings, arrays, and maps,
but you can cast nodes matching YAML Paths to boolean, number, or date.
Casting switches may be before or after file arguments.
Examples:
nt2toml example.nt
nt2toml <example.nt
cat example.nt | nt2toml
nt2toml --int People.age --boolean 'People."is a wizard"' example.nt
Usage:
nt2toml [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--boolean, -b YAMLPATH:str Cast each node matching the given YAML Path
query as boolean; may be given multiple
times
--date, -d YAMLPATH:str Cast each node matching the given YAML Path
query as a date, assuming it's ISO 8601; may
be given multiple times
--number, --int, --float, -i, -f YAMLPATH:str
Cast each node matching the given YAML Path
query as a number; may be given multiple
times
--schema, -s NESTEDTEXTFILE:ExistingFile
Cast nodes matching YAML Path queries
specified in a NestedText document. It must
be a map with one or more of the keys:
'null', 'boolean', 'number'Each key's value
is a list of YAML Paths.; may be given
multiple times
json2nt 0.2.7
Read JSON and output its content as NestedText.
Examples:
json2nt example.json
json2nt <example.json
cat example.json | json2nt
Usage:
json2nt [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--to-schema, -s Rather than convert the inputs, generate a schema
yaml2nt 0.2.7
Read YAML and output its content as NestedText.
Examples:
yaml2nt example.yml
yaml2nt <example.yml
cat example.yml | yaml2nt
Usage:
yaml2nt [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--to-schema, -s Rather than convert the inputs, generate a schema
toml2nt 0.2.7
Read TOML and output its content as NestedText.
Examples:
toml2nt example.yml
toml2nt <example.yml
cat example.yml | toml2nt
Usage:
toml2nt [SWITCHES] input_files...
Meta-switches:
-h, --help Prints this help message and quits
-v, --version Prints the program's version and quits
Switches:
--to-schema, -s Rather than convert the inputs, generate a schema
YAML prend officiellement les types de clés sans cordes, comme les cartes, les listes et les nombres. La prise en charge des clés non corrigées varie d'un analyseur YAML à la suivante et n'est actuellement pas gérée par NestTextTo.
Si quelqu'un est intéressé à utiliser le texto nesté avec des types de clés sans cordes, veuillez ouvrir un problème et je verrai ce que je peux faire!
$ cat log.jsonl{ "chat_id" : 651321 , "event" : " receiving code " , "user_first_name" : " Andy " , "user_id" : 651321 }
{ "event" : " guessed syntax " , "ext" : null , "probability" : 0.05201493203639984 , "probability_min" : 0.12 , "syntax" : " Matlab " }
{ "chat_id" : 651321 , "event" : " colorizing code " , "syntax" : " py3 " , "user_first_name" : " Andy " , "user_id" : 651321 }
{ "event" : " Got deletion request " , "reply_to_msg_user_id" : 651321 , "user_id" : 651321 }
{"chat_id": 651321, "event": "failed to delete message (it's probably gone already)", "exception": "Traceback (most recent call last):n File "/home/andy/Code/colorcodebot/app/colorcodebot.py", line 278, in delete_after_delayn bot.delete_message(message.chat.id, message.message_id)n File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/__init__.py", line 1081, in delete_messagen return apihelper.delete_message(self.token, chat_id, message_id, timeout)n File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 1299, in delete_messagen return _make_request(token, method_url, params=payload, method='post')n File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 152, in _make_requestn json_result = _check_result(method_name, result)n File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 179, in _check_resultn raise ApiTelegramException(method_name, result, result_json)ntelebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message to delete not found"}$ json2nt log.jsonl-
chat_id : 651321
event : receiving code
user_first_name : Andy
user_id : 651321
-
event : guessed syntax
ext :
probability : 0.05201493203639984
probability_min : 0.12
syntax : Matlab
-
chat_id : 651321
event : colorizing code
syntax : py3
user_first_name : Andy
user_id : 651321
-
event : Got deletion request
reply_to_msg_user_id : 651321
user_id : 651321
-
chat_id : 651321
event : failed to delete message (it's probably gone already)
exception :
> Traceback (most recent call last):
> File "/home/andy/Code/colorcodebot/app/colorcodebot.py", line 278, in delete_after_delay
> bot.delete_message(message.chat.id, message.message_id)
> File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/__init__.py", line 1081, in delete_message
> return apihelper.delete_message(self.token, chat_id, message_id, timeout)
> File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 1299, in delete_message
> return _make_request(token, method_url, params=payload, method='post')
> File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 152, in _make_request
> json_result = _check_result(method_name, result)
> File "/home/andy/.local/share/venvs/84f7fb558856f9ccc2c54e3d122862b6/venv/lib/python3.10/site-packages/telebot/apihelper.py", line 179, in _check_result
> raise ApiTelegramException(method_name, result, result_json)
> telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message to delete not found 



Pour le développement local, il est recommandé d'activer un Venv, puis
$ pip install -r local-requirements.txtDe là, vous voudrez peut-être regarder les définitions de tâches courantes:
$ task -l
$ nox -lEt vous souhaiterez peut-être parcourir la documentation de la structure et du code en tant que HTML rendu, sur le site des pages GitHub.