{ "info": { "author": "Federico Rizzo", "author_email": "synestem@ticATgmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3 :: Only" ], "description": "# kord\nkord is a python framework that provides programmers with a simple api for the creation of music-based applications. While it's mainly intended for theoretical purposes, some of it's modules contain functionality specifically tailored for dealing with plucked-string instruments.\n\n![](https://github.com/synestematic/kord/blob/master/resources/chrom.png?raw=true)\n\n## installation\n\nThe only dependency for `kord` is the package `bestia`, my own library for creating command-line applications. Both can be automatically installed using pip:\n\n```\n$ python3 -m pip install kord\n```\n\nThe fretboard application component of the framework can also be run directly in a containerized form. This requires you to install 0 dependencies on your system besides docker. \n\n```\n$ docker run -t synestematic/kord C --scale major\n```\n\nScroll to the bottom of the README for more information on the fretboard application.\n\n\n# api reference:\n\nPlease only expect to understand the following documentation if you have an above basic understanding of music theory. With that said, let's dive into the first module:\n\n\n## kord.notes\n\n### class MusicNote(object):\n\nMusicNote instances are the building blocks of the framework and have 3 main attributes:\n\n```\n* chr: str ('C', 'D', 'E', 'F', 'G', 'A', 'B')\n* alt: str ('bb', 'b', '', '#', '##')\n* oct: int (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)\n```\n\nYou can set these values when creating an instance and only the `chr` argument is required. Arguments `alt` and `oct` will default to `''` and `3` respectively. These are __positional__ arguments, not keyword arguments so keep that in mind when creating your objects.\n\n```\n>>> from kord.notes import MusicNote\n>>> e3, f3 = MusicNote('e'), MusicNote('f')\n>>> e3, f3\n(E\u00b3, F\u00b3) \n>>> MusicNote('G', 'b')\nG\u266d\u00b3\n>>> MusicNote('C', 9)\nC\u2079\n>>> MusicNote('B', 'b', 7)\nB\u266d\u2077\n>>> MusicNote('C', '#', 0)\nC\u266f\u2070\n```\n\nNotes with double alterations are supported but Notes with triple or more alterations will raise an exception:\n\n```\n>>> MusicNote('A', 'bb', 1)\nA\ud834\udd2b\u00b9\n>>> MusicNote('F', '##', 1)\nF\ud834\udd2a\u00b9\n>>> MusicNote('G', '###')\nTraceback (most recent call last):\n File \"\", line 1, in \n ...\nkord.errors.InvalidAlteration: ###\n```\n\nSimilarly, the maximum octave value currently supported is 9.\n\n```\n>>> MusicNote('D', 10)\nTraceback (most recent call last):\n File \"\", line 1, in \n ...\nkord.errors.InvalidOctave: 10\n```\n\n### Comparing MusicNote objects:\n\nThe ```- < > <= >= == != >> ** ``` operators allow computation of semitone intervals between MusicNote instances and give insight into their enharmonic relationships. Let's take a quick look at each operator separately:\n\n#### - operator\n\nThe substraction operator lets you compute the difference in semitones between two notes:\n\n```\n>>> f3 - e3\n1\n>>> MusicNote('a', 'b', 2) - MusicNote('g', '#', 2)\n0\n>>> MusicNote('a', 8) - MusicNote('c', 4)\n57\n>>> MusicNote('a', 8) - MusicNote('c', '##', 4)\n55\n```\n\n\n#### < > <= >= == != operators\n\nComparison operators return boolean values based *exclusively* on the interval between the 2 objects. \n\n```\n>>> f3 > e3\nTrue\n>>> f3 >= e3\nTrue\n```\n\nWhile the concept is seemingly straightforward, special attention needs to be taken when using `== !=` with enharmonic notes.\n\n```\n>>> n1 = MusicNote('F', '#', 5)\n>>> n2 = MusicNote('G', 'b', 5)\n>>> n1, n2\n(F\u266f\u2075, G\u266d\u2075)\n>>> n1 == n2\nTrue\n```\n\nThe notes F\u266f\u2075 and G\u266d\u2075 are NOT the same but since their interval is a unison, the `==` comparison evaluates True. This might seem a bit counter-intuitive at first but you can still check for exact note matches with the use of 2 other operators.\n\n#### >> ** operators\n\nThe power and right-shift operators allow you to compare Notes for equality based not on their intervals, but on their intrinsic `chr`, `alt`, `oct` properties. The strictest operator `>>` compares all 3 attributes for equality while the looser `**` ignores `oct`: \n\n```\n>>> ab1, ab5 = MusicNote('A', 'b', 1), MusicNote('A', 'b', 5)\n>>> ab1 == ab5\nFalse\n>>> ab1 ** ab5\nTrue\n```\n\nNotice `**` evaluates True since both instances are A flat notes, even when there is a wide interval between them.\n\n```\n>>> ab1 >> ab5\nFalse\n>>> ab1.oct = 5\n>>> ab1 >> ab5\nTrue\n```\n\nFor the `>>` operator to evaluate True, the octaves of the notes must match as well.\n\n\n
\n\n\n\n\n## kord.keys\n\n\n### class MusicKey(object):\n\nThink of MusicKey objects as generators of MusicNote objects. You can define a new class which inherits MusicKey and use any theoretical arrangement of `intervals` from the root note in order to create chords, scales, modes, etc. You can further taylor these child classes by restricting `degrees` to specific values, this is very useful for creating chords.\n\nThese are a couple of pre-defined examples to give you an idea of how it works:\n\n```\nclass ChromaticScale(MusicKey):\n intervals = (\n UNISON,\n MINOR_SECOND,\n MAJOR_SECOND,\n MINOR_THIRD,\n MAJOR_THIRD,\n PERFECT_FOURTH,\n AUGMENTED_FOURTH,\n PERFECT_FIFTH,\n MINOR_SIXTH,\n MAJOR_SIXTH,\n MINOR_SEVENTH,\n MAJOR_SEVENTH,\n )\n\nclass MajorScale(MusicKey):\n intervals = (\n UNISON,\n MAJOR_SECOND,\n MAJOR_THIRD,\n PERFECT_FOURTH,\n PERFECT_FIFTH,\n MAJOR_SIXTH,\n MAJOR_SEVENTH,\n )\n\nclass MajorPentatonicScale(MajorScale):\n degrees = (1, 2, 3, 5, 6)\n\nclass MajorTriad(MajorScale):\n degrees = (1, 3, 5)\n```\n\nBare in mind that MusicKey objects are initialized with `chr` and `alt` attributes, `oct` values are not taken into consideration. These allows us to simply unpack MusicNote objects in order to create MusicKey instances based off of them. Once we have a MusicKey object, we can access it's single degrees using list index notation:\n\n```\n>>> from kord.keys import ChromaticScale\n>>> c = MusicNote('C')\n>>> c_chromatic_scale = ChromaticScale(*c)\n>>> c_chromatic_scale[2]\nC\u266f\u2070\n>>> c_chromatic_scale[12]\nB\u2070\n```\n\n### MusicKey.spell()\n\nRetrieving individual degrees is good, but it is perhaps more interesting to look at a more dynamic way of getting notes out of our MusicKey instances. The `spell()` method provides such an interface for generating MusicNote instances on the fly. Let's take a look at a couple of examples and the several arguments that we can use when calling this method:\n\n```\n>>> for note in c_chromatic_scale.spell():\n... print(note, end=' ')\n...\nC\u2070 C\u266f\u2070 D\u2070 D\u266f\u2070 E\u2070 F\u2070 F\u266f\u2070 G\u2070 G\u266f\u2070 A\u2070 A\u266f\u2070 B\u2070 C\u00b9 >>> \n```\n\nAs seen above the method will generate the first octave of degrees of the object when called without arguments.\n\nThe `note_count` argument is an `int` and it allows us to set a specific amount of notes to retrieve:\n\n```\n>>> from kord.keys import MinorScale\n>>> a_minor_scale = MinorScale('A')\n>>> for note in a_minor_scale.spell(note_count=4):\n... print(note, end=' ')\n...\nA\u2070 B\u2070 C\u00b9 D\u00b9 >>> \n```\n\nBe careful, ask for too many notes and kord will throw and Exception when `oct` 9 has been exceeded.\n\nThe `yield_all` argument is a `bool` that will make the method yield not just `MusicNote` instances, but also `None` objects for every non-diatonic semitone found:\n\n```\n>>> for note in a_minor_scale.spell(note_count=4, yield_all=True):\n... print(note, end=' ')\n...\nA\u2070 None B\u2070 C\u00b9 None D\u00b9 >>> \n```\n\n\nThe `start_note` argument is a `MusicNote` object that can be used to start getting notes only after a specific note has been found. This can be done even if the note is not diatonic to the scale:\n\n```\n>>> Db1 = MusicNote('D', 'b', 1)\n>>> for note in a_minor_scale.spell(note_count=4, yield_all=True, start_note=Db1):\n... print(note, end=' ')\n...\nNone D\u00b9 None E\u00b9 F\u00b9 None G\u00b9 >>> \n```\n\n\n\n## fretboard tool\n\nA sample application `fretboard.py` comes built-in with `kord` and gives some insight into the possibilities of the framework. It displays a representation of your instrument's fretboard, tuned to your liking along with note patterns for any given mode (scale/chord) for any given root note. \n\nIf you installed via pip (as opposed to cloning this repo) installation path will depend on your system, it's usually something like `/usr/local/fretboard` or `~/.local/fretboard`. You will also find a `tunings` directory with some pre-defined instrument tunings in the form of .json files. Feel free to modify them or add your own and they should immediately become available to the run-time.\n\n```\n$ python3 fretboard.py --help\nusage: fretboard.py [-h] [-d] [-s | -c ] [-i] [-t] [-f] [-v] root\n\n<<< Fretboard visualizer sample tool for the kord music framework >>>\n\npositional arguments:\n root select key ROOT note\n\noptional arguments:\n -h, --help show this help message and exit\n -d, --degrees show degree numbers instead of note pitches\n -s , --scale major, minor, melodic_minor, harmonic_minor, major_pentatonic, minor_pentatonic,\n ionian, lydian, mixolydian, aeolian, dorian, phrygian, locrian, chromatic\n -c , --chord maj, min, aug, dim, maj7, min7, 7, dim7, min7dim5, maj9, min9, 9\n -i , --instrument banjo, guitar, pedal, bass, ukulele\n -t , --tuning check .json files for available options\n -f , --frets 1, 2, .., 36\n -v , --verbosity 0, 1, 2\n```\n\nThe only required parameter is the `root` note. \n\nThe `--scale` and `--chord` options let you choose which note pattern to display for the selected root. They are mutually exclusive and the default value is `--chord maj` when left blank.\n\nThe `--instrument` and `--tuning` options refer to the json files you will find in the tunings directory. Default values are `--instrument guitar --tuning standard`.\n\nThe `--frets` option let's you choose how many frets to visualize, maximum value is 36. Default value will fill your terminal screen.\n\nThe `--verbosity` option let's you choose how much information to see on-screen from 0 to 2. Default value is 1.\n\nThe `--degrees` option let's you display degree numbers instead of notes. Default value is false.\n\n\n## screenshots\n\nHere are a couple of pics to get you excited:\n\n### chords\n\n![](https://github.com/synestematic/kord/blob/master/resources/e7.png?raw=true)\n\n![](https://github.com/synestematic/kord/blob/master/resources/dim7.png?raw=true)\n\n### scales\n\n![](https://github.com/synestematic/kord/blob/master/resources/penta.png?raw=true)\n\n![](https://github.com/synestematic/kord/blob/master/resources/cs.png?raw=true)\n\n![](https://github.com/synestematic/kord/blob/master/resources/lydian.png?raw=true)\n\n\nKeep on rocking!\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/synestematic/kord", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "kord", "package_url": "https://pypi.org/project/kord/", "platform": "", "project_url": "https://pypi.org/project/kord/", "project_urls": { "Homepage": "https://github.com/synestematic/kord" }, "release_url": "https://pypi.org/project/kord/3.5/", "requires_dist": [ "bestia" ], "requires_python": "", "summary": "a framework for programming music applications", "version": "3.5", "yanked": false, "yanked_reason": null }, "last_serial": 8623653, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "cc94f546ecc703e5fe2ae9b8ec65fa33", "sha256": "8ff86490c0e080cfd8a19c2b02842010c4b9471e5d094993432945e26290a852" }, "downloads": -1, "filename": "kord-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cc94f546ecc703e5fe2ae9b8ec65fa33", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9498, "upload_time": "2019-09-20T14:05:03", "upload_time_iso_8601": "2019-09-20T14:05:03.256400Z", "url": "https://files.pythonhosted.org/packages/37/ab/c20f2dc98a361c3f6484a9c5cb04d6da41866788b9b207dfa6a0978efa19/kord-0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9bc8e49432b4338d57d65af2941d3881", "sha256": "0740f3d70b3acd8478d005ce8013aa77a6a496cdee376aaf09591100c89e1782" }, "downloads": -1, "filename": "kord-0.2.tar.gz", "has_sig": false, "md5_digest": "9bc8e49432b4338d57d65af2941d3881", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8233, "upload_time": "2019-09-20T14:05:04", "upload_time_iso_8601": "2019-09-20T14:05:04.987062Z", "url": "https://files.pythonhosted.org/packages/2e/28/013aad45ee5432de83333ff2d5dd1eaa85dd99cb5554efbd333c7859b314/kord-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4": [ { "comment_text": "", "digests": { "md5": "d4a30526bbb38ab215df99916542fdba", "sha256": "302c1b67fc8d7cdb42643ea81217a4e3ff33bcc53967c4f8ae8895db5f7f481e" }, "downloads": -1, "filename": "kord-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "d4a30526bbb38ab215df99916542fdba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11090, "upload_time": "2019-10-29T12:22:59", "upload_time_iso_8601": "2019-10-29T12:22:59.378926Z", "url": "https://files.pythonhosted.org/packages/25/d8/6311c7be5de12e9b879bed7930983a288558fdb1f84df5079349946b9c28/kord-0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "889263a41cc21c60c3d5db815d37388a", "sha256": "f595900e483e916a105a4824095c5ce9c09a495dbde4830bc4db9fd54f97c298" }, "downloads": -1, "filename": "kord-0.4.tar.gz", "has_sig": false, "md5_digest": "889263a41cc21c60c3d5db815d37388a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9832, "upload_time": "2019-10-29T12:23:01", "upload_time_iso_8601": "2019-10-29T12:23:01.688432Z", "url": "https://files.pythonhosted.org/packages/c5/f3/f45400188709ed7269349c79f22fa8d2a6eac6db759e2be2ca1de20cea52/kord-0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0": [ { "comment_text": "", "digests": { "md5": "42688807b41335a32a5b1b4804c173c2", "sha256": "77737740fd743e8588b5ad77672f1988dc08fc6aded20d3e185560770b0f3e88" }, "downloads": -1, "filename": "kord-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "42688807b41335a32a5b1b4804c173c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16580, "upload_time": "2020-10-19T07:40:00", "upload_time_iso_8601": "2020-10-19T07:40:00.964624Z", "url": "https://files.pythonhosted.org/packages/67/3d/6e490bb236f02906105fa321edfeb79586b2645f910ed74a90ed5273d62a/kord-1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "da162c8c4b3acc6de96668ea0478916e", "sha256": "9c5e41bc91aedfc799a238d405930ad28e6865800de31684c1715f23fd62fa31" }, "downloads": -1, "filename": "kord-1.0.tar.gz", "has_sig": false, "md5_digest": "da162c8c4b3acc6de96668ea0478916e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16629, "upload_time": "2020-10-19T07:40:02", "upload_time_iso_8601": "2020-10-19T07:40:02.514841Z", "url": "https://files.pythonhosted.org/packages/10/61/a2ab193bac07884475504d7264223674c24740a99e540e64034a77c54679/kord-1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5": [ { "comment_text": "", "digests": { "md5": "6100aa712d87bf585da38deed57f973c", "sha256": "22a32a6226e310f4d7d3d3581836acf9a7b0d569ccd3bd0ecbff6c8b3928ab0e" }, "downloads": -1, "filename": "kord-1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6100aa712d87bf585da38deed57f973c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17550, "upload_time": "2020-10-24T21:14:25", "upload_time_iso_8601": "2020-10-24T21:14:25.321994Z", "url": "https://files.pythonhosted.org/packages/2e/59/b32fb86a873f765ae90c30720b1cd37e590f91a0ea341f739d9838d7843d/kord-1.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ffb4c80f08f2fcac5fc1533d5e45446c", "sha256": "cebb0ac74d50a617eaf5670aa4e8ff5f8519f56756e0eac7c1da3a88125932a1" }, "downloads": -1, "filename": "kord-1.5.tar.gz", "has_sig": false, "md5_digest": "ffb4c80f08f2fcac5fc1533d5e45446c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18247, "upload_time": "2020-10-24T21:14:27", "upload_time_iso_8601": "2020-10-24T21:14:27.219054Z", "url": "https://files.pythonhosted.org/packages/67/21/69469a018083e0a172b585a95284d3803d9054e3de9c0a0953a57170c73f/kord-1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6": [ { "comment_text": "", "digests": { "md5": "fa6e08e32055456f3aa850afdc49efd4", "sha256": "b6033fb5c4304e4c079ef0f8fdc1ea2411ffd67c3aed0ecac3fd30d175457b05" }, "downloads": -1, "filename": "kord-1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "fa6e08e32055456f3aa850afdc49efd4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18009, "upload_time": "2020-10-26T07:27:33", "upload_time_iso_8601": "2020-10-26T07:27:33.480562Z", "url": "https://files.pythonhosted.org/packages/47/80/b6c8f3da5aca3729c0a9d62e0ef53f4372e8c9441eff37f5ead22da57f0c/kord-1.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d9878fcb4c559b48457308b5158fe4bb", "sha256": "c7b0f5d5d66c3ad6612ba999ada23c522be72fe6dfca1c54f31830dd4c32f5d5" }, "downloads": -1, "filename": "kord-1.6.tar.gz", "has_sig": false, "md5_digest": "d9878fcb4c559b48457308b5158fe4bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19002, "upload_time": "2020-10-26T07:27:34", "upload_time_iso_8601": "2020-10-26T07:27:34.938939Z", "url": "https://files.pythonhosted.org/packages/4c/64/758a06812fcbfb97a99520c47ec676d99c608ce24fa8696643db69b0b5f4/kord-1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0": [ { "comment_text": "", "digests": { "md5": "9ce7f7cb8229fbc491be1394d2fd74d3", "sha256": "d21b47bb4b079a9d660fc20f856d94692f8a210beb6d458e85cdfe76f79509c1" }, "downloads": -1, "filename": "kord-2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9ce7f7cb8229fbc491be1394d2fd74d3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16879, "upload_time": "2020-10-31T08:58:02", "upload_time_iso_8601": "2020-10-31T08:58:02.172899Z", "url": "https://files.pythonhosted.org/packages/44/34/694b3a10784f900c2ecf887e264f32baf0f018823b13c9ac42bf37b2bac9/kord-2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "895084171b0f258fc5252e17bf8edbf4", "sha256": "42399321cc9c0a59e9ee8b0fa0f00390983c7aa201633e21bd8e5ca40ae55864" }, "downloads": -1, "filename": "kord-2.0.tar.gz", "has_sig": false, "md5_digest": "895084171b0f258fc5252e17bf8edbf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18655, "upload_time": "2020-10-31T08:58:03", "upload_time_iso_8601": "2020-10-31T08:58:03.423478Z", "url": "https://files.pythonhosted.org/packages/21/3c/ca49683d8642adb2daa2b5a34676d5a4140538a0f956326d56f76cfb0c67/kord-2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1": [ { "comment_text": "", "digests": { "md5": "7510e20a47d4319f2ad4b7d32e6ea242", "sha256": "3ebb14b49df6c32700a1dc08f15fd5ae6c52e2c0c9c891c6a3b9b1f03ef96d6e" }, "downloads": -1, "filename": "kord-2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7510e20a47d4319f2ad4b7d32e6ea242", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17344, "upload_time": "2020-11-01T21:19:24", "upload_time_iso_8601": "2020-11-01T21:19:24.810249Z", "url": "https://files.pythonhosted.org/packages/74/75/3a8f81689ee73432f5a787c7159c8e93b37b5b4c5208d27b6dd0fe7ae0a2/kord-2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d7773a779a4cd36ded2441e608e5304f", "sha256": "23be7729bfb2141bc52b75d12cd31d67d916c7f694125651cce7191efebe0301" }, "downloads": -1, "filename": "kord-2.1.tar.gz", "has_sig": false, "md5_digest": "d7773a779a4cd36ded2441e608e5304f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19220, "upload_time": "2020-11-01T21:19:26", "upload_time_iso_8601": "2020-11-01T21:19:26.656047Z", "url": "https://files.pythonhosted.org/packages/c8/e3/4c12c99b7e6391445469da14ee69316a4eb225e1cf6d34a9a532d0dcb7be/kord-2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2": [ { "comment_text": "", "digests": { "md5": "bb3fea790ea7d978d7d1f2d72c8cf41e", "sha256": "a1a7eb869fb9fb092fc3819ff109898a856241738c452d120bda5824c30c24a8" }, "downloads": -1, "filename": "kord-2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bb3fea790ea7d978d7d1f2d72c8cf41e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17151, "upload_time": "2020-11-02T01:02:14", "upload_time_iso_8601": "2020-11-02T01:02:14.245064Z", "url": "https://files.pythonhosted.org/packages/43/a2/cb27741cebcbb70f6c9e6f78fcf03a377f12962b7d2c7a26c54d7a29d8a1/kord-2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0e479ef4f505c058776d733d86de914a", "sha256": "1547a7ab8a4b238785e335088a2a287ab990056fad62406ad02e8ea2d8bd613e" }, "downloads": -1, "filename": "kord-2.2.tar.gz", "has_sig": false, "md5_digest": "0e479ef4f505c058776d733d86de914a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19052, "upload_time": "2020-11-02T01:02:15", "upload_time_iso_8601": "2020-11-02T01:02:15.895188Z", "url": "https://files.pythonhosted.org/packages/89/9e/d0934205533e4e21884ff65f7e89b590978e1fc541708832cfff981e08e2/kord-2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3": [ { "comment_text": "", "digests": { "md5": "6a3997f94da1ee4ac24f6936561fb077", "sha256": "76a210e66dcdd060094e5031d8cf499ec927ae85c1e06d35a66545a720f04160" }, "downloads": -1, "filename": "kord-2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "6a3997f94da1ee4ac24f6936561fb077", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17077, "upload_time": "2020-11-02T13:17:31", "upload_time_iso_8601": "2020-11-02T13:17:31.346321Z", "url": "https://files.pythonhosted.org/packages/d8/09/0197d3608bd43e340980c357400aa86a3de48876a6d024fac034b9b9613c/kord-2.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4ab59a086c6c13e1d3fd8e59271fd679", "sha256": "5273600c85e0e56d3fe1ae26d5572d129af8dc7731875748aec7eff603b559b2" }, "downloads": -1, "filename": "kord-2.3.tar.gz", "has_sig": false, "md5_digest": "4ab59a086c6c13e1d3fd8e59271fd679", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18976, "upload_time": "2020-11-02T13:17:33", "upload_time_iso_8601": "2020-11-02T13:17:33.086780Z", "url": "https://files.pythonhosted.org/packages/95/1e/7afbd9a7a55fef4dfa49f1448a208b23b68680cdc12611be52fe5a1139d8/kord-2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.4": [ { "comment_text": "", "digests": { "md5": "0fea4b267efcade16c2ec2f0b6d131ea", "sha256": "986733fd0ff9407126ae65f32dbbb62963255bb4a5d19d3728157d7f0cdba9f4" }, "downloads": -1, "filename": "kord-2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0fea4b267efcade16c2ec2f0b6d131ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17087, "upload_time": "2020-11-02T16:51:45", "upload_time_iso_8601": "2020-11-02T16:51:45.242257Z", "url": "https://files.pythonhosted.org/packages/92/cc/3803abf12061486cf7768c1f8468668ddb624c2e9cd0d240d7584d3a5509/kord-2.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a9e68efdaf73d9046a80caa754fa34d2", "sha256": "0aeeb09fccad2fd9c1e61baa822a761754bab2014c0a8a1cff94a636fd26fa21" }, "downloads": -1, "filename": "kord-2.4.tar.gz", "has_sig": false, "md5_digest": "a9e68efdaf73d9046a80caa754fa34d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18985, "upload_time": "2020-11-02T16:51:46", "upload_time_iso_8601": "2020-11-02T16:51:46.982782Z", "url": "https://files.pythonhosted.org/packages/4a/1b/fb26e4583fad171386dff01762d150dc842139ca6a691b5b0da6d5eb8d58/kord-2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.5": [ { "comment_text": "", "digests": { "md5": "aab057ed120370aba811a3c678232697", "sha256": "bc8ae31a3c1c594a84e29ec4888afca56bedf51cc411edd4ff001cdfd9cc275f" }, "downloads": -1, "filename": "kord-2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "aab057ed120370aba811a3c678232697", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20958, "upload_time": "2020-11-02T21:50:41", "upload_time_iso_8601": "2020-11-02T21:50:41.742793Z", "url": "https://files.pythonhosted.org/packages/4e/ca/88b836a0cda83f15879fc0995511230a850f342ca976d6e1ba135635c8e2/kord-2.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8d6a15260c300b85fb71c13626f97fc7", "sha256": "a10d93924c91e3143c5e6651cb22afdc21bf8ef9de4a53364681382f5904696f" }, "downloads": -1, "filename": "kord-2.5.tar.gz", "has_sig": false, "md5_digest": "8d6a15260c300b85fb71c13626f97fc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21677, "upload_time": "2020-11-02T21:50:43", "upload_time_iso_8601": "2020-11-02T21:50:43.382782Z", "url": "https://files.pythonhosted.org/packages/75/e9/cffeec575409275be33e29d7e7539cea8f2ab08ea9ea64e0b1ee5329a0b2/kord-2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "2.6": [ { "comment_text": "", "digests": { "md5": "50b8b2952310bd7774d9cb3daaee8eb3", "sha256": "0dc4f2181bc39b6fb6475a603f2cfa99329067d9910492025db7629e3b3d9fb5" }, "downloads": -1, "filename": "kord-2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "50b8b2952310bd7774d9cb3daaee8eb3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20960, "upload_time": "2020-11-02T22:23:44", "upload_time_iso_8601": "2020-11-02T22:23:44.404325Z", "url": "https://files.pythonhosted.org/packages/69/46/43f281073c5c29a8e15f14fd210d28aafdcc0a5148a740c887c00566d054/kord-2.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0980c3af4cc0f78c2f8e7fca3b4b02a3", "sha256": "ea053cd88a59b3e0940c74630c8b541550962dcb12badb44bd83a6074a3c30eb" }, "downloads": -1, "filename": "kord-2.6.tar.gz", "has_sig": false, "md5_digest": "0980c3af4cc0f78c2f8e7fca3b4b02a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21683, "upload_time": "2020-11-02T22:23:46", "upload_time_iso_8601": "2020-11-02T22:23:46.004102Z", "url": "https://files.pythonhosted.org/packages/dd/b4/6b5ecc649052b4c0e3d892323234541bc58d7669ea5c264bd0b5670b370e/kord-2.6.tar.gz", "yanked": false, "yanked_reason": null } ], "2.7": [ { "comment_text": "", "digests": { "md5": "12426dd07d9401175cd9a2cde14338c0", "sha256": "9c4a4fde120e4b1e0d48d2b59450c727e9435918cde99d196a232447350d0391" }, "downloads": -1, "filename": "kord-2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "12426dd07d9401175cd9a2cde14338c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21343, "upload_time": "2020-11-03T08:41:40", "upload_time_iso_8601": "2020-11-03T08:41:40.816955Z", "url": "https://files.pythonhosted.org/packages/cf/d6/f423b517711fdfe958c9e314a2fe63914071ebf535463abb141c62b7fc28/kord-2.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0631cf481a017995c95cbfa876c3879b", "sha256": "aa26c409f669dd1dd36ce149328c4ac7762f160843492f3810198d25eddc79ee" }, "downloads": -1, "filename": "kord-2.7.tar.gz", "has_sig": false, "md5_digest": "0631cf481a017995c95cbfa876c3879b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22307, "upload_time": "2020-11-03T08:41:42", "upload_time_iso_8601": "2020-11-03T08:41:42.221872Z", "url": "https://files.pythonhosted.org/packages/14/90/fe86ddda804e03d2b7b20c49ff05ecfc85552ad1db8280ab0855f36a16ab/kord-2.7.tar.gz", "yanked": false, "yanked_reason": null } ], "2.8": [ { "comment_text": "", "digests": { "md5": "1ace42a0d189520f12dc877f564bbbbe", "sha256": "1d3b5e480ad17829517fe9eef60de764637575a9b5cf1fa7995b3ba944094325" }, "downloads": -1, "filename": "kord-2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "1ace42a0d189520f12dc877f564bbbbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21689, "upload_time": "2020-11-03T09:56:45", "upload_time_iso_8601": "2020-11-03T09:56:45.771035Z", "url": "https://files.pythonhosted.org/packages/17/d1/34e7d7e247d8fe2e2dbb891ea224caced4b1940cdb1628ee9741a8d74b7a/kord-2.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9a151175a2e43d44226856b970e89f5c", "sha256": "a58d76df0487032df4436e00744a385ccea08dde65bba38d729d3d13fb26cf98" }, "downloads": -1, "filename": "kord-2.8.tar.gz", "has_sig": false, "md5_digest": "9a151175a2e43d44226856b970e89f5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23073, "upload_time": "2020-11-03T09:56:47", "upload_time_iso_8601": "2020-11-03T09:56:47.591654Z", "url": "https://files.pythonhosted.org/packages/ba/45/c12757cdc1fb69243b797fef8102313ed62f70e0a6cb1d04340f112ac98a/kord-2.8.tar.gz", "yanked": false, "yanked_reason": null } ], "2.9": [ { "comment_text": "", "digests": { "md5": "411ecfd306b13ea030ba513e7de3409c", "sha256": "3fea4f1274f5b3b244a4a5134622f5f4abc8257518ec6e141cf8e8b3e0ec3db4" }, "downloads": -1, "filename": "kord-2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "411ecfd306b13ea030ba513e7de3409c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21810, "upload_time": "2020-11-03T19:05:04", "upload_time_iso_8601": "2020-11-03T19:05:04.674007Z", "url": "https://files.pythonhosted.org/packages/35/26/03418c08dfd4893f80525843cd8ed9169acfb916737a0872cc1676de626b/kord-2.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bdcfec42a6d330d5fa0aa11cfe6a95b2", "sha256": "09210f5bc0b44a68747941b2d578ad83c95eea61d1d98c46c255be0b5bfe8b3e" }, "downloads": -1, "filename": "kord-2.9.tar.gz", "has_sig": false, "md5_digest": "bdcfec42a6d330d5fa0aa11cfe6a95b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23335, "upload_time": "2020-11-03T19:05:06", "upload_time_iso_8601": "2020-11-03T19:05:06.057773Z", "url": "https://files.pythonhosted.org/packages/53/a3/db97784d04500f37940a0b82a2440a454041b14af92aeb7ca5ea54fd8817/kord-2.9.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0": [ { "comment_text": "", "digests": { "md5": "3a15ea0e75b8c15aac7da87ea4b302f6", "sha256": "1f8b3ee75ef154dcd84c4ce0448dcfb8b784cd5554d1b9fb748d45bd5177f7f4" }, "downloads": -1, "filename": "kord-3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3a15ea0e75b8c15aac7da87ea4b302f6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21894, "upload_time": "2020-11-04T08:52:37", "upload_time_iso_8601": "2020-11-04T08:52:37.105625Z", "url": "https://files.pythonhosted.org/packages/6e/6b/091c0f54efe72585a66560d7a38b1ee5a9d91b975025c57baa52ab4ac042/kord-3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b3de5e64e00c1ad7bf99864af829b410", "sha256": "cdfee27c0e8c7b4d0495dfe8eb6ad6aeddb956473866396baf11777e990d6197" }, "downloads": -1, "filename": "kord-3.0.tar.gz", "has_sig": false, "md5_digest": "b3de5e64e00c1ad7bf99864af829b410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23407, "upload_time": "2020-11-04T08:52:38", "upload_time_iso_8601": "2020-11-04T08:52:38.249499Z", "url": "https://files.pythonhosted.org/packages/9a/b7/723f29dbe4d96b1e028c2c1bb57afdbc9363170a010afef017b65c576c04/kord-3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.1": [ { "comment_text": "", "digests": { "md5": "fa17621f5a2b31df03f8ab38fb431de8", "sha256": "adfc71effb9f06d9d67660f4057dd6362add441010cd8e49bc60a913f7fc8272" }, "downloads": -1, "filename": "kord-3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fa17621f5a2b31df03f8ab38fb431de8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21898, "upload_time": "2020-11-06T21:02:48", "upload_time_iso_8601": "2020-11-06T21:02:48.090101Z", "url": "https://files.pythonhosted.org/packages/cb/21/9fd3fc48fa01679cad93eb4c069767d4a3ccfc51a7c7e94b79b1fd33887a/kord-3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f9efed7c9868b0527bae1181cd8e698e", "sha256": "65cc78ce3c97fda5acdcaa2863ed3862eb842807557ae7a75850b3858bd7f744" }, "downloads": -1, "filename": "kord-3.1.tar.gz", "has_sig": false, "md5_digest": "f9efed7c9868b0527bae1181cd8e698e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23404, "upload_time": "2020-11-06T21:02:49", "upload_time_iso_8601": "2020-11-06T21:02:49.576931Z", "url": "https://files.pythonhosted.org/packages/80/34/29fc40ff296463566176b02400607f48ce329aa9d63a74efcbb9a0d7eef4/kord-3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "3.2": [ { "comment_text": "", "digests": { "md5": "c7f391967dfb80c15ca80fdebfb9ade0", "sha256": "e5041954ac71d6469cecb41c2d9925765e25fbadb861e0f279aa030602c73309" }, "downloads": -1, "filename": "kord-3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c7f391967dfb80c15ca80fdebfb9ade0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22178, "upload_time": "2020-11-08T11:03:11", "upload_time_iso_8601": "2020-11-08T11:03:11.642782Z", "url": "https://files.pythonhosted.org/packages/d1/c9/5c031ed607b17bda85ffaa6b4161c759c569246db77da9474f360c9b984a/kord-3.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "82ad3ae45a4a730a753788aaf9f83aed", "sha256": "5c0f37c83d91bcefb8d4b216987225a7d2b2d370e38e713cde8506af145d8d04" }, "downloads": -1, "filename": "kord-3.2.tar.gz", "has_sig": false, "md5_digest": "82ad3ae45a4a730a753788aaf9f83aed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23710, "upload_time": "2020-11-08T11:03:13", "upload_time_iso_8601": "2020-11-08T11:03:13.978759Z", "url": "https://files.pythonhosted.org/packages/c2/6f/ce01086d30f4290d7b4774d421b3ac328d3d561ab79fdea0ebc7e3e55582/kord-3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "3.3": [ { "comment_text": "", "digests": { "md5": "2251e4d1dad92715d77cf1d7eacaa744", "sha256": "35747b995a9126916282aac86a4a599a84d20651ccf42a0d56684d9e0ac6a6a1" }, "downloads": -1, "filename": "kord-3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2251e4d1dad92715d77cf1d7eacaa744", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22385, "upload_time": "2020-11-08T23:31:09", "upload_time_iso_8601": "2020-11-08T23:31:09.529473Z", "url": "https://files.pythonhosted.org/packages/27/d1/0cb0f19e48d5a03c5c35940269635913922f702d16a4358d55cef9f31762/kord-3.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4af1d21486508074673abbb0307ae601", "sha256": "2708b8f3da123bb89003b91135b3bd9a6bb219386b31b684761f132b3ee2164a" }, "downloads": -1, "filename": "kord-3.3.tar.gz", "has_sig": false, "md5_digest": "4af1d21486508074673abbb0307ae601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23783, "upload_time": "2020-11-08T23:31:11", "upload_time_iso_8601": "2020-11-08T23:31:11.255612Z", "url": "https://files.pythonhosted.org/packages/75/a7/440589042c149c19a9b6d0920767c875d720d33b7f728361d82f451d7ff2/kord-3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "3.4": [ { "comment_text": "", "digests": { "md5": "02d24546003e7eb71c2ca3fde2870680", "sha256": "db32367363b1cf696b5a2b117b1b03da61f34580652f06a058cd86e48243b11f" }, "downloads": -1, "filename": "kord-3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "02d24546003e7eb71c2ca3fde2870680", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22642, "upload_time": "2020-11-10T12:03:17", "upload_time_iso_8601": "2020-11-10T12:03:17.262783Z", "url": "https://files.pythonhosted.org/packages/1d/ce/0000f160f6501f9e259d1c5cb098eeeb53c7f07ccdb593d3a07f80b045bf/kord-3.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "808ea07899764aed7bf7883574390843", "sha256": "a1a4c71825c282e6f685e4850212133338e60484556ff787d84c52b78e4171ac" }, "downloads": -1, "filename": "kord-3.4.tar.gz", "has_sig": false, "md5_digest": "808ea07899764aed7bf7883574390843", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24325, "upload_time": "2020-11-10T12:03:18", "upload_time_iso_8601": "2020-11-10T12:03:18.719550Z", "url": "https://files.pythonhosted.org/packages/ef/9d/465296061950ed9eedf316bd9c0b38bc3ea8e727f2ba64ae2aa4d5e01d20/kord-3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "3.5": [ { "comment_text": "", "digests": { "md5": "9fee4a7a73ebf001566d2a8690dcc431", "sha256": "c17f87d706be9d82882d0500c14bbb536e424b4b52d7e73ea3b1669bc7a1b3c3" }, "downloads": -1, "filename": "kord-3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9fee4a7a73ebf001566d2a8690dcc431", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22516, "upload_time": "2020-11-10T12:54:43", "upload_time_iso_8601": "2020-11-10T12:54:43.112095Z", "url": "https://files.pythonhosted.org/packages/9f/23/7199058e70c9bee7d53b260c5df216a8864be581d44affb98284ee1209f6/kord-3.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4d329370ee9cc55efd0dcdea71923730", "sha256": "8bca51c920b08e64afc1b035fbc8d708c3ef1c493b1e4a8c2766bd54df33b5a8" }, "downloads": -1, "filename": "kord-3.5.tar.gz", "has_sig": false, "md5_digest": "4d329370ee9cc55efd0dcdea71923730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24052, "upload_time": "2020-11-10T12:54:44", "upload_time_iso_8601": "2020-11-10T12:54:44.948753Z", "url": "https://files.pythonhosted.org/packages/6a/a4/7a299c006b57889279e165be8a57991e61a8ac2417b3507e6ba08bbbba5a/kord-3.5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9fee4a7a73ebf001566d2a8690dcc431", "sha256": "c17f87d706be9d82882d0500c14bbb536e424b4b52d7e73ea3b1669bc7a1b3c3" }, "downloads": -1, "filename": "kord-3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9fee4a7a73ebf001566d2a8690dcc431", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22516, "upload_time": "2020-11-10T12:54:43", "upload_time_iso_8601": "2020-11-10T12:54:43.112095Z", "url": "https://files.pythonhosted.org/packages/9f/23/7199058e70c9bee7d53b260c5df216a8864be581d44affb98284ee1209f6/kord-3.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4d329370ee9cc55efd0dcdea71923730", "sha256": "8bca51c920b08e64afc1b035fbc8d708c3ef1c493b1e4a8c2766bd54df33b5a8" }, "downloads": -1, "filename": "kord-3.5.tar.gz", "has_sig": false, "md5_digest": "4d329370ee9cc55efd0dcdea71923730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24052, "upload_time": "2020-11-10T12:54:44", "upload_time_iso_8601": "2020-11-10T12:54:44.948753Z", "url": "https://files.pythonhosted.org/packages/6a/a4/7a299c006b57889279e165be8a57991e61a8ac2417b3507e6ba08bbbba5a/kord-3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }