YAML for command line
Project description
Description
Simple script that allow read access to YAML files through command line.
This can be handy, if you want to get access to YAML data in your shell scripts.
This script supports only read access and it might not support all the subtleties of YAML specification. But it should support some handy basic query of YAML file.
Requirements
shyaml works in Linux, MacOSX, and Windows with python 2.7 and 3+.
Installation
You don’t need to download the GIT version of the code as shyaml is available on the PyPI. So you should be able to run:
pip install shyaml
If you have downloaded the GIT sources, then you could add install the current version via:
pip install .
And if you don’t have the GIT sources but would like to get the latest master or branch from github, you could also:
pip install git+https://github.com/0k/shyaml
Or even select a specific revision (branch/tag/commit):
pip install git+https://github.com/0k/shyaml@master
On macOS, you can also install the latest release version via Homebrew:
brew install shyaml
Or to install the master branch:
brew install shyaml --HEAD
Documentation
The following documented examples are actually tested automatically at each release for conformance on all platform and python versions.
Please note that there is some subtle benign differences in some output whether shyaml is using the libyaml C implementation or the full python implementation. The documentation can be run with both implementation but some examples will fail depending on the implementation. To make things clear, I’ll use some annotation and you can yourself check which version you are using with:
$ shyaml -V | grep "^libyaml used:" ## docshtest: if-success-set LIBYAML libyaml used: True
Usage
shyaml takes its YAML input file from standard input ONLY. So let’s define here a common YAML input for the next examples:
$ cat <<EOF > test.yaml name: "MyName !! héhé" ## using encoding, and support comments ! subvalue: how-much: 1.1 how-many: 2 things: - first - second - third maintainer: "Valentin Lab" description: | Multiline description: Line 1 Line 2 subvalue.how-much: 1.2 subvalue.how-much\more: 1.3 subvalue.how-much\.more: 1.4 EOF
General browsing struct and displaying simple values
Simple query of simple attribute:
$ cat test.yaml | shyaml get-value name MyName !! héhé
Query nested attributes by using ‘.’ between key labels:
$ cat test.yaml | shyaml get-value subvalue.how-much 1.1
Get type of attributes:
$ cat test.yaml | shyaml get-type name str $ cat test.yaml | shyaml get-type subvalue.how-much float
Get length of structures or sequences:
$ cat test.yaml | shyaml get-length subvalue 5 $ cat test.yaml | shyaml get-length subvalue.things 3
But this won’t work on other types:
$ cat test.yaml | shyaml get-length name Error: get-length does not support 'str' type. Please provide or select a sequence or struct.
Parse structure
Get sub YAML from a structure attribute:
$ cat test.yaml | shyaml get-type subvalue struct $ cat test.yaml | shyaml get-value subvalue ## docshtest: ignore-if LIBYAML how-much: 1.1 how-many: 2 things: - first - second - third maintainer: Valentin Lab description: 'Multiline description: Line 1 Line 2 '
Iteration through keys only:
$ cat test.yaml | shyaml keys name subvalue subvalue.how-much subvalue.how-much\more subvalue.how-much\.more
Iteration through keys only (\0 terminated strings):
$ cat test.yaml | shyaml keys-0 subvalue | xargs -0 -n 1 echo "VALUE:" VALUE: how-much VALUE: how-many VALUE: things VALUE: maintainer VALUE: description
Iteration through values only (\0 terminated string highly recommended):
$ cat test.yaml | shyaml values-0 subvalue | while IFS='' read -r -d $'\0' value; do echo "RECEIVED: '$value'" done RECEIVED: '1.1' RECEIVED: '2' RECEIVED: '- first - second - third ' RECEIVED: 'Valentin Lab' RECEIVED: 'Multiline description: Line 1 Line 2 '
Iteration through keys and values (\0 terminated string highly recommended):
$ read-0() { while [ "$1" ]; do IFS=$'\0' read -r -d '' "$1" || return 1 shift done } && cat test.yaml | shyaml key-values-0 subvalue | while read-0 key value; do echo "KEY: '$key'" echo "VALUE: '$value'" echo done KEY: 'how-much' VALUE: '1.1' KEY: 'how-many' VALUE: '2' KEY: 'things' VALUE: '- first - second - third ' KEY: 'maintainer' VALUE: 'Valentin Lab' KEY: 'description' VALUE: 'Multiline description: Line 1 Line 2 ' <BLANKLINE>
Notice, that you’ll get the same result using get-values. get-values will support sequences and struct, and key-values support only struct. (for a complete table of which function support what you can look at the usage line)
And, if you ask for keys, values, key-values on non struct like, you’ll get an error:
$ cat test.yaml | shyaml keys name Error: keys does not support 'str' type. Please provide or select a struct. $ cat test.yaml | shyaml values subvalue.how-many Error: values does not support 'int' type. Please provide or select a struct. $ cat test.yaml | shyaml key-values subvalue.how-much Error: key-values does not support 'float' type. Please provide or select a struct.
Parse sequence
Query a sequence with get-value:
$ cat test.yaml | shyaml get-value subvalue.things - first - second - third
And access individual elements with python-like indexing:
$ cat test.yaml | shyaml get-value subvalue.things.0 first $ cat test.yaml | shyaml get-value subvalue.things.-1 third $ cat test.yaml | shyaml get-value subvalue.things.5 Error: invalid path 'subvalue.things.5', index 5 is out of range (3 elements in sequence).
Note that this will work only with integer (preceded or not by a minus sign):
$ cat test.yaml | shyaml get-value subvalue.things.foo Error: invalid path 'subvalue.things.foo', non-integer index 'foo' provided on a sequence.
More usefull, parse a list in one go with get-values:
$ cat test.yaml | shyaml get-values subvalue.things first second third
Note that the action is called get-values, and that output is separated by newline char(s) (which is os dependent), this can bring havoc if you are parsing values containing newlines itself. Hopefully, shyaml has a get-values-0 to terminate strings by \0 char, which allows complete support of any type of values, including YAML. get-values outputs key and values for struct types and only values for sequence types:
$ cat test.yaml | shyaml get-values-0 subvalue | while IFS='' read -r -d '' key && IFS='' read -r -d '' value; do echo "'$key' -> '$value'" done 'how-much' -> '1.1' 'how-many' -> '2' 'things' -> '- first - second - third ' 'maintainer' -> 'Valentin Lab' 'description' -> 'Multiline description: Line 1 Line 2 '
Please note that, if get-values{,-0} actually works on struct, it’s maybe more explicit to use the equivalent key-values{,0}. It should be noted that key-values{,0} is not completly equivalent as it is meant to be used with struct only and will complain if not.
You should also notice that values that are displayed are YAML compatible. So if they are complex, you can re-use shyaml on them to parse their content.
Of course, get-values should only be called on sequence elements:
$ cat test.yaml | shyaml get-values name Error: get-values does not support 'str' type. Please provide or select a sequence or struct.
Parse YAML document streams
YAML input can be a stream of documents, the action will then be applied to each document:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 3)); then break fi echo "---" done | shyaml get-value ingests.0.id | tr '\0' '&' tag-1&tag-2&tag-3
Notice that NUL char is used by default for separating output iterations if not used in -y mode. You can use that to separate each output. -y mode will use conventional YAML way to separate documents (which is ---).
So:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 3)); then break fi echo "---" done | shyaml get-value -y ingests.0.id ## docshtest: ignore-if LIBYAML tag-1 ... --- tag-2 ... --- tag-3 ...
Notice that it is not supported to use any query that can output more than one value (like all the query that can be suffixed with *-0) with a multi-document YAML:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 3)); then break fi echo "---" done | shyaml keys ingests.0 >/dev/null Error: Source YAML is multi-document, which doesn't support any other action than get-type, get-length, get-value
You’ll probably notice also, that output seems buffered. The previous content is displayed as a whole only at the end. If you need a continuous flow of YAML document, then the command line option -L is required to force a non-buffered line-by-line reading of the file so as to ensure that each document is properly parsed as soon as possible. That means as soon as either a YAML document end is detected (--- or EOF):
Without the -L, if we kill our shyaml process before the end:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 2)); then break fi echo "---" sleep 10 done 2>/dev/null | shyaml get-value ingests.0.id & pid=$! ; sleep 2; kill $pid
With the -L, if we kill our shyaml process before the end:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 2)); then break fi echo "---" sleep 10 done 2>/dev/null | shyaml get-value -L ingests.0.id & pid=$! ; sleep 2; kill $pid tag-1
Using -y is required to force a YAML output that will be also parseable as a stream, which could help you chain shyaml calls:
$ i=0; while true; do ((i++)) echo "ingests:" echo " - data: xxx" echo " id: tag-$i" if ((i >= 3)); then break fi echo "---" sleep 0.2 done | shyaml get-value ingests.0 -L -y | shyaml get-value id | tr '\0' '\n' tag-1 tag-2 tag-3
An empty string will be still considered as an empty YAML document:
$ echo | shyaml get-value "toto" Error: invalid path 'toto', can't query subvalue 'toto' of a leaf (leaf value is None).
Keys containing ‘.’
Use and \\ to access keys with \ and \. to access keys with literal . in them. Just be mindful of shell escaping (example uses single quotes):
$ cat test.yaml | shyaml get-value 'subvalue\.how-much' 1.2 $ cat test.yaml | shyaml get-value 'subvalue\.how-much\\more' 1.3 $ cat test.yaml | shyaml get-value 'subvalue\.how-much\\.more' default default
This last one didn’t escape correctly the last ., this is the correct version:
$ cat test.yaml | shyaml get-value 'subvalue\.how-much\\\.more' default 1.4
empty string keys
Yep, shyaml supports empty stringed keys. You might never have use for this one, but it’s in YAML specification. So shyaml supports it:
$ cat <<EOF > test.yaml empty-sub-key: "": a: foo "": bar "": wiz EOF $ cat test.yaml | shyaml get-value empty-sub-key.. bar $ cat test.yaml | shyaml get-value '' wiz
Please notice that one empty string is different than no string at all:
$ cat <<EOF > test.yaml "": a: foo b: bar "x": wiz EOF $ cat test.yaml | shyaml keys x $ cat test.yaml | shyaml keys '' a b
The first asks for keys of the root YAML, the second asks for keys of the content of the empty string named element located in the root YAML.
Handling missing paths
There is a third argument on the command line of shyaml which is the DEFAULT argument. If the given KEY was not found in the YAML structure, then shyaml would return what you provided as DEFAULT.
As of version < 0.3, this argument was defaulted to the empty string. For all version above 0.3 (included), if not provided, then an error message will be printed:
$ echo "a: 3" | shyaml get-value a mydefault 3 $ echo "a: 3" | shyaml get-value b mydefault mydefault $ echo "a: 3" | shyaml get-value b Error: invalid path 'b', missing key 'b' in struct.
You can emulate pre v0.3 behavior by specifying explicitly an empty string as third argument:
$ echo "a: 3" | shyaml get-value b ''
Starting with version 0.6, you can also use the -q or --quiet to fail silently in case of KEY not found in the YAML structure:
$ echo "a: 3" | shyaml -q get-value b; echo "errlvl: $?" errlvl: 1 $ echo "a: 3" | shyaml -q get-value a; echo "errlvl: $?" 3errlvl: 0
Ordered mappings
Currently, using shyaml in a shell script involves happily taking YAML inputs and outputting YAML outputs that will further be processed.
And this works very well.
Before version 0.4.0, shyaml would boldly re-order (sorting them alphabetically) the keys in mappings. If this should be considered harmless per specification (mappings are indeed supposed to be unordered, this means order does not matter), in practical, YAML users could feel wronged by shyaml when there YAML got mangled and they wanted to give a meaning to the basic YAML mapping.
Who am I to forbid such usage of YAML mappings ? So starting from version 0.4.0, shyaml will happily keep the order of your mappings:
$ cat <<EOF > test.yaml mapping: a: 1 c: 2 b: 3 EOF
For shyaml version before 0.4.0:
# shyaml get-value mapping < test.yaml a: 1 b: 3 c: 2
For shyaml version including and after 0.4.0:
$ shyaml get-value mapping < test.yaml a: 1 c: 2 b: 3
Strict YAML for further processing
Processing yaml can be done recursively and extensively through using the output of shyaml into shyaml. Most of its output is itself YAML. Most ? Well, for ease of use, literal keys (string, numbers) are outputed directly without YAML quotes, which is often convenient.
But this has the consequence of introducing inconsistent behavior. So when processing YAML coming out of shyaml, you should probably think about using the --yaml (or -y) option to output only strict YAML.
With the drawback that when you’ll want to output string, you’ll need to call a last time shyaml get-value to explicitly unquote the YAML.
Object Tag
YAML spec allows object tags which allows you to map local data to objects in your application.
When using shyaml, we do not want to mess with these tags, but still allow parsing their internal structure.
get-type will correctly give you the type of the object:
$ cat <<EOF > test.yaml %TAG !e! tag:example.com,2000:app/ --- - !e!foo "bar" EOF $ shyaml get-type 0 < test.yaml tag:example.com,2000:app/foo
get-value with -y (see section Strict YAML) will give you the complete yaml tagged value:
$ shyaml get-value -y 0 < test.yaml ## docshtest: ignore-if LIBYAML !<tag:example.com,2000:app/foo> 'bar'
Another example:
$ cat <<EOF > test.yaml %TAG ! tag:clarkevans.com,2002: --- !shape # Use the ! handle for presenting # tag:clarkevans.com,2002:circle - !circle center: &ORIGIN {x: 73, y: 129} radius: 7 - !line start: *ORIGIN finish: { x: 89, y: 102 } - !label start: *ORIGIN color: 0xFFEEBB text: Pretty vector drawing. EOF $ shyaml get-type 2 < test.yaml tag:clarkevans.com,2002:label
And you can still traverse internal value:
$ shyaml get-value -y 2.start < test.yaml x: 73 y: 129
Note that all global tags will be resolved and simplified (as !!map, !!str, !!seq), but not unknown local tags:
$ cat <<EOF > test.yaml %YAML 1.1 --- !!map { ? !!str "sequence" : !!seq [ !!str "one", !!str "two" ], ? !!str "mapping" : !!map { ? !!str "sky" : !myobj "blue", ? !!str "sea" : !!str "green", }, } EOF $ shyaml get-value < test.yaml ## docshtest: ignore-if LIBYAML sequence: - one - two mapping: sky: !myobj 'blue' sea: green
Empty documents
When provided with an empty document, shyaml will consider the document to hold a null value:
$ echo | shyaml get-value -y ## docshtest: ignore-if LIBYAML null ...
Usage string
A quick reminder of what is available will be printed when calling shyaml without any argument:
$ shyaml Error: Bad number of arguments. Usage: shyaml {-h|--help} shyaml {-V|--version} shyaml [-y|--yaml] [-q|--quiet] ACTION KEY [DEFAULT] <BLANKLINE>
The full help is available through the usage of the standard -h or -help:
$ shyaml --help Parses and output chosen subpart or values from YAML input. It reads YAML in stdin and will output on stdout it's return value. Usage: shyaml {-h|--help} shyaml {-V|--version} shyaml [-y|--yaml] [-q|--quiet] ACTION KEY [DEFAULT] Options: -y, --yaml Output only YAML safe value, more precisely, even literal values will be YAML quoted. This behavior is required if you want to output YAML subparts and further process it. If you know you have are dealing with safe literal value, then you don't need this. (Default: no safe YAML output) -q, --quiet In case KEY value queried is an invalid path, quiet mode will prevent the writing of an error message on standard error. (Default: no quiet mode) -L, --line-buffer Force parsing stdin line by line allowing to process streamed YAML as it is fed instead of buffering input and treating several YAML streamed document at once. This is likely to have some small performance hit if you have a huge stream of YAML document, but then you probably don't really care about the line-buffering. (Default: no line buffering) ACTION Depending on the type of data you've targetted thanks to the KEY, ACTION can be: These ACTIONs applies to any YAML type: get-type ## returns a short string get-value ## returns YAML These ACTIONs applies to 'sequence' and 'struct' YAML type: get-values{,-0} ## returns list of YAML get-length ## returns an integer These ACTION applies to 'struct' YAML type: keys{,-0} ## returns list of YAML values{,-0} ## returns list of YAML key-values,{,-0} ## returns list of YAML Note that any value returned is returned on stdout, and when returning ``list of YAML``, it'll be separated by a newline or ``NUL`` char depending of you've used the ``-0`` suffixed ACTION. KEY Identifier to browse and target subvalues into YAML structure. Use ``.`` to parse a subvalue. If you need to use a literal ``.`` or ``\``, use ``\`` to quote it. Use struct keyword to browse ``struct`` YAML data and use integers to browse ``sequence`` YAML data. DEFAULT if not provided and given KEY do not match any value in the provided YAML, then DEFAULT will be returned. If no default is provided and the KEY do not match any value in the provided YAML, shyaml will fail with an error message. Examples: ## get last grocery cat recipe.yaml | shyaml get-value groceries.-1 ## get all words of my french dictionary cat dictionaries.yaml | shyaml keys-0 french.dictionary ## get YAML config part of 'myhost' cat hosts_config.yaml | shyaml get-value cfgs.myhost <BLANKLINE>
Using invalid keywords will issue an error and the usage message:
$ shyaml get-foo Error: 'get-foo' is not a valid action. Usage: shyaml {-h|--help} shyaml {-V|--version} shyaml [-y|--yaml] [-q|--quiet] ACTION KEY [DEFAULT] <BLANKLINE>
Version information
You can get useful information (in case of a bug) or if you want to check if shyaml is using the libyaml C bindings, thanks to shyaml --version (or -V):
# shyaml -V ## Example of possible output version: unreleased PyYAML: 3.13 libyaml available: 0.1.6 libyaml used: True Python: 2.7.8 (default, Oct 20 2014, 15:05:19) [GCC 4.9.1]
Note that you can force to use the python implementation even if libyaml is available using FORCE_PYTHON_YAML_IMPLEMENTATION:
$ FORCE_PYTHON_YAML_IMPLEMENTATION=1 shyaml --version | grep "^libyaml used:" libyaml used: False
Python API
shyaml can be used from within python if you need so:
>>> import shyaml >>> try: ... from StringIO import StringIO ... except ImportError: ... from io import StringIO >>> yaml_content = StringIO(""" ... a: 1.1 ... b: ... x: foo ... y: bar ... """) >>> for out in shyaml.do(stream=yaml_content, ... action="get-type", ... key="a"): ... print(repr(out)) 'float'
Please note that shyaml.do(..) outputs a generator iterating through all the yaml documents of the stream. In most usage case, you’ll have only one document.
You can have a peek at the code, the do(..) function has a documented prototype.
Contributing
Any suggestion or issue is welcome. Push request are very welcome, please check out the guidelines.
Push Request Guidelines
You can send any code. I’ll look at it and will integrate it myself in the code base and leave you as the author. This process can take time and it’ll take less time if you follow the following guidelines:
check your code with PEP8 or pylint. Try to stick to 80 columns wide.
separate your commits per smallest concern.
each commit should pass the tests (to allow easy bisect)
each functionality/bugfix commit should contain the code, tests, and doc.
prior minor commit with typographic or code cosmetic changes are very welcome. These should be tagged in their commit summary with !minor.
the commit message should follow gitchangelog rules (check the git log to get examples)
if the commit fixes an issue or finished the implementation of a feature, please mention it in the summary.
If you have some questions about guidelines which is not answered here, please check the current git log, you might find previous commit that would show you how to deal with your issue.
License
Copyright (c) 2020 Valentin Lab.
Licensed under the BSD License.
Changelog
0.6.2 (2020-12-15)
Fix
UTF-8 values would end in tracebacks (fixes #51) [Valentin Lab]
0.6.1 (2018-12-14)
New
Added -V|--version shyaml command line option to get full version information. [Valentin Lab]
This includes shyaml’s version, but also PyYAML version installed, and availability of the C libyaml bindings, and if they are used.
Fix
Document behavior on empty input. [Valentin Lab]
0.6.0 (2018-12-13)
New
Python 3.7 compatibility. [Valentin Lab]
Support YAML streams (fixes #32) [Valentin Lab]
shyaml can now be used from within python. [Valentin Lab]
You can import shyaml and launch inner function in a python program thanks to accessible API.
-q or --quiet to avoid printing error message on missing paths. (fix #14) [Valentin Lab]
Full support of yaml tags (fix #40) [Valentin Lab]
Changes
Finish to document all behaviors. [Valentin Lab]
Fix
Script was not installed correctly on windows. (fix #38) [Valentin Lab]
Python 3 incompatible code removed in get-values{,-0}. [Valentin Lab]
Use C yaml implementation from libyaml when available (fix #3) [Valentin Lab]
0.5.2 (2018-04-25)
Fix
Missing doc about get-length and typo corrected in help message. [Valentin Lab]
Python 3.0 exception when querying for missing keys removed. (fix #34) [Valentin Lab]
0.5.1 (2018-03-06)
New
Add requirements section. [Valentin Lab]
Add command get-length for structures or sequences (closes #25, fixes #20) [gt3389b]
Fix
Add homebrew installation instructions. [Zhiming Wang]
Using -y with no argument casted an exception instead of displaying usage. (fixes #41) [Valentin Lab]
0.5.0 (2017-03-23)
New
Introduce -y option to force full yaml output. [Valentin Lab]
By default, output of literal string where directly printed unquoted and useable. If this is very useful, there are many cases where this is not consistent and is ambiguous, especially when this string is itself a YAML representation.
This could actually lead to subtle bugs occuring when re-using shyaml output for further parsing.
So if you want unquoted literal types to further process these elements, use -y. If you expect a string and wan’t it plain raw, avoid -y.
0.4.2 (2017-02-08)
Fix
<<: YAML merging facility support. [Valentin Lab]
0.4.1 (2016-08-29)
Fix
On python2, unicode strings would be displayed literaly (fixes #26). [Valentin Lab]
str is not the correct type to match all type of strings in python 2. So unicode strings (usually produced thanks to accentuated characters) would be printed quoted (the python representation).
0.4.0 (2016-01-11)
New
Avoid reordering mapping keys in the output. [Valentin Lab]
Several commands from shyaml will output YAML themselves. But in the process, the whole content is parsed and re-dumped. This can lead to differences with the original inputs. The ordering of keys can be annoying in some use cases, even if, well mappings should not be ordered, these are ordered by the sequential nature of a file, and using ‘omap’ is often tedious. shyaml now keep the original order the keys were met.
0.3.4 (2015-03-06)
New
Added a nice --help doc. [Valentin Lab]
Added key-values{,-0} argument to get key and values in one go. [Valentin Lab]
Error is casted if no default specified and the key is not existent. [Valentin Lab]
Changes
Be more informative in some key related error message. (fixed #7) [Valentin Lab]
0.2.2 (2014-03-19)
Fix
No argument at all was treated as one empty string argument. Thx Yassa Bb. (fixes #6) [Valentin Lab]
0.2.1 (2013-11-23)
New
Python3 support. [Valentin Lab]
Fix
Keys can now be empty or contains dots . if they are properly escaped (fixes #5, thanks to Daniel Giribet) [Daniel Giribet]
0.2.0 (2013-05-03)
New
Support for iteration in sequence and struct in one go. [Valentin Lab]
Fix
Forgot to mention ./autogen.sh execution when getting the code from git, and be more clear about other means of installation. [Valentin Lab]
0.1.3 (2013-03-29)
Fix
Removed the spurious line feed at the end of any shyaml output. [Valentin Lab]
Support querying for… nothing. Which now returns the whole input YAML. [Valentin Lab]
Before this fix, you couldn’t ask for shyaml get-value alone, even if it makes sense but is completely useless as it returns the whole YAML input.
0.1.2 (2013-03-23)
New
Support for list indexes (see README.rst). [Valentin Lab]
Catch exceptions when parsing structure and output a clean error message. [Valentin Lab]
0.1.1 (2013-02-27)
Changes
Some minor enhancements, and an “Install” section. [Valentin Lab]
0.1.0 (2013-02-27)
First import. [Valentin Lab]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file shyaml-0.6.2.tar.gz
.
File metadata
- Download URL: shyaml-0.6.2.tar.gz
- Upload date:
- Size: 38.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 696e94f1c49d496efa58e09b49c099f5ebba7e24b5abe334f15e9759740b7fd0 |
|
MD5 | 1df5a9a30af975dc29d023355d912031 |
|
BLAKE2b-256 | b9597e6873fa73a476de053041d26d112b65d7e1e480b88a93b4baa77197bd04 |
File details
Details for the file shyaml-0.6.2-py2.py3-none-any.whl
.
File metadata
- Download URL: shyaml-0.6.2-py2.py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d4849f0a280dea2da6d952539bc6a867ddf9c7026b026eb3170185e638da73ef |
|
MD5 | db51d35d653b1eb04c86c8681376fa60 |
|
BLAKE2b-256 | 2a5c139cda90758d6bc18a16876a2c291264cf06fd736ca54606862a43931877 |