{ "info": { "author": "YakDriver", "author_email": "projects@plus3it.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Utilities" ], "description": "=======\nSatsuki\n=======\n\n.. image:: https://img.shields.io/github/license/plus3it/satsuki.svg\n :target: ./LICENSE\n :alt: License\n.. image:: https://travis-ci.org/plus3it/satsuki.svg?branch=master\n :target: http://travis-ci.org/plus3it/satsuki\n :alt: Build Status\n.. image:: https://ci.appveyor.com/api/projects/status/9f0bdlgdc9em6bqc?svg=true\n :target: https://github.com/plus3it/satsuki\n :alt: Build Status\n.. image:: https://img.shields.io/pypi/pyversions/satsuki.svg\n :target: https://pypi.python.org/pypi/satsuki\n :alt: Python Version Compatibility\n.. image:: https://img.shields.io/pypi/v/satsuki.svg\n :target: https://pypi.python.org/pypi/satsuki\n :alt: Version\n\n\n**Satsuki** (*pronounced SAHT-ski*) is a Python package that helps\nmanage GitHub releases and release assets.\nSatsuki is especially useful paired with Continuous Integration/\nContinuous Deployment (CI/CD)\ntools such as `Travis CI `_ and `AppVeyor `_.\n\nWhy not just use the Travis CI GitHub Releases provider? Good question.\nThe simple answer is that the provider doesn't work very well yet.\nIn specific, you can't update an existing release or add files\n(assets) to a release or provide a release message and a release asset\nat the same time.\n\nSatsuki and Travis CI Example\n=============================\n\nThis example shows setting up Travis CI with your GitHub OAUTH token\nfor use by Satsuki, and then creating releases and uploading assets.\n\n**Step 1: Encrypt OAUTH Token**\n\nUsing Travis's command line tool, encrypt your OAUTH token *with* the\nenvironment variable name. NOTE: Travis CI encrypts values on a repo\nby repo\nbasis. Thus, a value encrypted for one repo will not work in another\nrepo, even if commonly owned.\n\n.. code-block:: bash\n\n $ cd myrepodir\n $ travis encrypt SATS_TOKEN=YOUR_GITHUB_OATH_TOKEN\n Please add the following to your .travis.yml file:\n\n secure: \"SBKfniOex/LRjHrN/IVQHyKquTxGRY6UxZhrPd1fMsFHu+1Jl8GGkMX8wZ8GL29S0GgIZwDVHBwu3kVcX0xJWmRrLf9kcUrN5RdbTn7KxAxqboJKLolJqXhbSE1pZBUm1IbY3BuL0hZ4oYg8KyuARnanF0PXjpJTFysYq9cYwolc4XzZ0EOXRNCSBLkcIUsULhunFHPKxaATEwUMgnOIYHkBMdfjVynuW1hqhgwAstpfhNvryir6vbZla7M3/EBTqJjuGhXTf1U6YWubGFBXNDwqIqRurMHRC0pyqc/NpEUhgFANTqs3ax/Ka0cnZAxoq99rPWe9ZtElN/GKrjJT6STPjfsaCC6ls3JFC0aorEuMMH+2pqEr7p3Llbs1OkBnZKD7aTNQxmMimZ78yq6snSM5zew9Nxjv0lytZOpHQXFtjXJtc8YcXcWylYSngMnRVnPzxFADn4udNdFZzP8+HZEkkKHJXaICu0Vx15ll4tEo1I2BJQ/ViV4sjo6KfAL3ZqC6RTjs2aqnMHu7i8DrQzYlmRXsKr2HyVudN3cgAgK5cZkJArCjxu8glY5OrFvSxjKOF1tno8Zrhne6xyBcQfVXP7gqQYQ/sUx1dqTc7XPqkB4r4OkmXH+Af7jRQahQxk04+vahtrKJX4WEYeA4teOAYN2xWsbvdrCcIvgUXNx=\"\n\n\n**Step 2: Add Token to Travis YAML**\n\nNow, we'll add this secure value to the ``.travis.yml`` file in our repo.\nOnly Travis CI can decrypt this value now. (Although this shows Python\nas the language, Satsuki will work with projects in other languages\nas long as you install Python 3 and pip.)\n\n.. code-block:: yaml\n\n language: python\n sudo: false\n env:\n global:\n - secure: SBKfniOex/LRjHrN/IVQHyKquTxGRY6UxZhrPd1fMsFHu+1Jl8GGkMX8wZ8GL29S0GgIZwDVHBwu3kVcX0xJWmRrLf9kcUrN5RdbTn7KxAxqboJKLolJqXhbSE1pZBUm1IbY3BuL0hZ4oYg8KyuARnanF0PXjpJTFysYq9cYwolc4XzZ0EOXRNCSBLkcIUsULhunFHPKxaATEwUMgnOIYHkBMdfjVynuW1hqhgwAstpfhNvryir6vbZla7M3/EBTqJjuGhXTf1U6YWubGFBXNDwqIqRurMHRC0pyqc/NpEUhgFANTqs3ax/Ka0cnZAxoq99rPWe9ZtElN/GKrjJT6STPjfsaCC6ls3JFC0aorEuMMH+2pqEr7p3Llbs1OkBnZKD7aTNQxmMimZ78yq6snSM5zew9Nxjv0lytZOpHQXFtjXJtc8YcXcWylYSngMnRVnPzxFADn4udNdFZzP8+HZEkkKHJXaICu0Vx15ll4tEo1I2BJQ/ViV4sjo6KfAL3ZqC6RTjs2aqnMHu7i8DrQzYlmRXsKr2HyVudN3cgAgK5cZkJArCjxu8glY5OrFvSxjKOF1tno8Zrhne6xyBcQfVXP7gqQYQ/sUx1dqTc7XPqkB4r4OkmXH+Af7jRQahQxk04+vahtrKJX4WEYeA4teOAYN2xWsbvdrCcIvgUXNx=\n\n**Step 3: Setup the Travis YAML Script Step**\n\nWe'll use the ``script`` step to build an application into an\nOS/machine specific binary using\n`GravityBee `_.\n\n.. code-block:: yaml\n\n install:\n - pip install gravitybee satsuki\n script:\n - gravitybee --src-dir src --clean\n\n\n**Step 4: Setup the Travis YAML Before Deploy Step**\n\nNext, ssign\nvalues to environment variables so that Satsuki can use them to\ncreate the release and tag. Optionally, you can\nalso use\nspecial variables in Satsuki that will be substituted with\nvalues from GravityBee. See **Variable Substitution** below.\n\n.. code-block:: yaml\n\n before_deploy:\n - export SATS_TAG=$(grep \"version = \" $TRAVIS_BUILD_DIR/setup.cfg | sed \"s/version = //\")\n - export SATS_BODY=\"* Here is the message for the release\"\n - export SATS_FILE=\"mysuperapp-1.2.3-standalone-linux-x86_64\"\n\n\n**Step 5: Setup the Travis YAML Deploy Step**\n\nEverything should be set now to deploy.\n\n.. code-block:: yaml\n\n deploy:\n - provider: script\n script: satsuki\n skip_cleanup: true\n on:\n branch: master\n repo: YakDriver/mysuperapp\n python: \"3.6\"\n\n\nNow if you've enabled your repo on Travis CI, when you commit to the\nmaster branch, if all goes well, you'll get a release with your binary\nfile associated with it.\n\n\nReference\n=========\n\nSatsuki can be used with command line (CL) options or environment\nvariables, or a mix of both. If both are provided, command line\noptions take precedence.\n\n\nOptions\n-------\n\nUsing Satsuki, you can create releases. A release is a GitHub feature.\nHowever, a release is related to a tag, which is a pure Git feature. (If\nthe tag doesn't exist, Satsuki will create it along with the release.)\nYou can also create assets (e.g., binary files) that are\nassociated with releases. Thus Satsuki has options that relate to each:\nAsset ==> Release ==> Tag.\n\nOptions from each, tag, release, and asset, can be provided at\nthe same time,\nand Satsuki\nwill attempt to act appropriately on each. For example, in one\ncommand you can create a tag, release, and asset.\n\nRelease/Satsuki Related\n-----------------------\n\nLocal logging can be configured in ``satsuki/logging.conf``.\n\n================ =============== ==========================================\nENV VAR CL Options Desciption\n================ =============== ==========================================\nSATS_TOKEN --token **[Required]** An OAUTH token with\n repo access.\nSATS_COMMAND -c, --command The operation to perform on the GitHub\n release. Choose from ``upsert`` or\n ``delete``. If ``delete`` is selected and a\n file is provided, the file (release\n asset) is deleted instead of the release.\n *Default:* ``upsert``\nSATS_RECREATE_OK --recreate **[Flag]** Indicates whether a release\n commitish can be updated by deleting\n and recreating the release. Otherwise,\n a release cannot be updated with a new\n commit SHA. If this flag is set,\n ``--include-tag`` is implied.\n *Default: not*\nSATS_SLUG -s, --slug **[Required]** Either repo and user or\n the slug (in the form user/repo) must be\n provided. *If not provided, it will default\n to the value provided by Travis CI or\n AppVeyor, if any.*\nSATS_REPO -r, --repo **[Required]** The GitHub repository to\n work with.\nSATS_USER -u, --user **[Required]** The owner of the repository\n to work with.\nSATS_REL_NAME -n, --rel-name The name of the release. **Available for\n variable substitution.\n See below.**\n *Default: tag name*\nSATS_LATEST --latest **[Required][Flag]** Either this option\n *OR* ``--tag`` must be used.\n When used, Satsuki will perform any\n operations on the latest release.\n *Default: Not*\nSATS_BODY -b, --body The message that shows up with releases.\n **Available for variable substitution.\n See below.**\n *Default: Release *\nSATS_PRE -p, --pre **[Flag]** Whether or not this release\n is a prerelease. *Default: Not*\nSATS_DRAFT -d, --draft **[Flag]** Whether or not this release\n is a draft. *Default: Not*\nSATS_FORCE --force **[Flag]** Force Satsuki to delete items\n when normally it would not. **CAUTION:**\n You could easily delete every\n release in your repository with this.\n *Default: Not*\n================ =============== ==========================================\n\n\nTag Related\n-----------\n\n================ =============== ==========================================\nENV VAR CL Options Desciption\n================ =============== ==========================================\nSATS_TAG -t, --tag **[Required]** Either the tag\n *OR* the ``--latest`` option must be\n provided. If both are used, tag\n takes precedence. In finding existing\n releases, the \"tag\" value may be either\n the release ID (e.g., 10746271) or tag\n name (e.g., v0.1.0). However, if a\n release ID is provided, and it does not\n exist, an error will be thrown to avoid\n creating a tag with an ID-like name.\n **Available for variable substitution.\n See below.**\n *If not provided,\n will default\n to the value provided by Travis CI or\n AppVeyor, if any.*\nSATS_COMMITISH --commitish Can be any branch or commit SHA. Unused\n if the Git tag already exists.\n *If not provided, it will\n default\n to the TRAVIS_COMMIT environment variable\n provided by\n Travis CI or APPVEYOR_REPO_COMMIT from\n AppVeyor, if any. If none is provided,\n GitHub will default to the default branch.*\nSATS_INCLUDE_TAG --include-tag Whether to delete the tag when deleting the\n release. If the provided tag does not match\n a release, the tag will be deleted. If the\n tag includes a POSIX-style filename pattern\n match, all tags which aren't associated\n with releases will be deleted. This is\n handy for cleaning up tags. If you have\n many tags to cleanup, you may need to run\n this multiple times to complete the\n cleaning. *Default: Not*\n================ =============== ==========================================\n\n\nAsset Related\n-------------\n\nThese options can be used multiple times. If there is one label or one MIME\ntype, and multiple files, the same label and MIME type will be applied to each\nfile. Otherwise, there must be the same number of labels and/or MIME types as\nfiles, or an error will be thrown.\n\n================ =============== ==========================================\nENV VAR CL Options Desciption\n================ =============== ==========================================\nSATS_FILE -f, --file File(s) to be uploaded as release asset(s).\n If the file name contains an asterik (*)\n it will be treated as a POSIX-style glob\n and all matching files will be uploaded.\n This option can be used multiple times\n to upload multiple files.\n *Default: No file is uploaded.*\nSATS_LABEL -l, --label Label to display for files instead of the\n file name. Not recommended with multiple\n file upload since all will share the same\n label. **Available for variable\n substitution.\n See below.** *Default: GitHub will\n use the raw\n file name.*\nSATS_MIME -m, --mime The mime type for files. *Default:\n A guess of the file type or*\n ``application/octet-stream`` *if all else\n fails.*\nSATS_FILE_SHA --file-sha Whether to create SHA256 hashes for upload\n files, and either append them to the file\n label or upload them in a separate file.\n Valid options are: ``none``, ``file``, and\n ``label``. *Default: none*\nSATS_FILES_FILE --files-file Name of JSON file with information about\n file(s) to upload.\n See below.\n *Default: Will look for*\n ``gravitybee-files.json``\n================ =============== ==========================================\n\n\nVariable Substitution\n---------------------\n\nFor certain values, you can optionally include variables\nthat will be\nsubstituted using information from GravityBee.\nWhether variables are replaced depends\non all the following conditions being met:\n\n* The GravityBee info file (``gravitybee-info.json``) is in\n the current directory.\n* The file is correctly formatted JSON.\n* The file uses the correct structure defined by GravityBee.\n* The variables within the environment variables are spelled\n correctly and not\n replaced prior to getting to Satsuki (e.g., by the shell\n or OS).\n\nIf you're having trouble getting substitutions to work,\ntry displaying environment variables (e.g., using\n``env`` on POSIX systems or ``SET`` on Windows) to make sure\n$s haven't been replaced. On POSIX, use single quotes when setting\nenvironment variables to prevent premature substitution.\n\nThese are the variables you can use.\n\n===================== ==========================================\nVARIABLE Desciption\n===================== ==========================================\n$gb_pkg_ver The version of the package extracted by\n GravityBee from setup.py or setup.cfg.\n$gb_pkg_name The name of the package extracted by\n GravityBee from setup.py or setup.cfg,\n which is often the application name.\n$gb_pkg_name_lower Same as $gb_pkg_name but lowercase.\n$gb_sa_app The name of the binary file, standalone\n application created by GravityBee.\n===================== ==========================================\n\nAn example of using substitution.\n\n.. code-block::\n\n $ export SATS_TAG='$gb_pkg_ver' # will be replaced with 4.2.6, for example\n\n\nThe Files File\n--------------\n\nSatsuki also accepts a JSON-formatted file containing information about\nassets to be uploaded (see the ``--files-file`` option above). The file\ncan contain information about multiple files and should contain\ninformation about files\naccessible to Satsuki, with paths relative to the directory in which\nSatsuki is run. A file in the correct format is generated by\n`GravityBee `_.\n\nSatsuki will always look in the current directory for a GravityBee\nfiles file (``gravitybee-files.json``). If found, Satsuki will\nupload the specified files. To avoid this behavior, remove a\nGravityBee files file from the current directory. You can also use\na GravityBee files file in another location, besides the current\ndirectory, by using the ``--files-file`` flag.\n\nThis is an example of the format.\n\n.. code-block::\n\n [{'filename': 'gbtestapp-4.2.6-standalone-osx-x86_64',\n 'label': 'gbtestapp Standalone Executable (gbtestapp-4.2.6-standalone-osx-x86_64) [GravityBee Build]',\n 'mime-type': 'application/x-executable',\n 'path': '/path/to/file/gbtestapp-4.2.6-standalone-osx-x86_64'}]\n\n\nCommand-Line Examples\n---------------------\n\nHere is an example of using Satsuki to clean up tags.\nThis command will delete all tags not connected to a release that\nmatch the pattern ``Test-*``. To be able to clean tags,\nSatsuki must be run from the ``git`` directory of the repo.\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag Test-* -c delete -v\n\n\nDelete the release asset with the filename\n``release-asset.exe`` from the release tagged with ``Test-ve8226c``.\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag Test-ve8226c -c delete -v --file release-asset.exe\n\n\nCreate a new release and tag called ``testtag`` based\non the given commit SHA, and upload the file ``release-asset.exe`` as an\nasset of the new release.\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag testtag --commitish 42b8b9f3f44e0a11071cd3c56eaed29a305c3339 \\\n -v --file release-asset.exe\n\nDelete the release called ``1.2.3``.\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag 1.2.3 -c delete -v\n\nDelete the release and local and/or remote tags called ``1.2.3``.\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag 1.2.3 -c delete -v --include-tag\n\nDelete ALL releases and local and/or remote tags matching ``Test-*``.\n**USE CAUTION!**\n\n.. code-block::\n\n $ satsuki -s \"/\" --token \\\n --tag Test-* -v -c delete --include-tag --force\n\n\n\nThe First Confirmed Upload SHA\n------------------------------\n\n``25c2f15b0c332bf58d5e625f54525873bcddc2083578b335fdc4a1be8d79edda``\n\nCHANGE LOG\n==========\n\n0.1.13 - 2019.01.29\n-------------------\n* [ENHANCEMENT] Clean up code.\n* [ENHANCEMENT] Transfer to Plus3IT.\n\n0.1.12 - 2019.01.25\n-------------------\n* [ENHANCEMENT] Code clean up.\n* [ENHANCEMENT] Add pylint, flake8 to CI.\n* [ENHANCEMENT] Revamp Travis CI to test Windows, Mac, Linux.\n\n0.1.11 - 2018.06.05\n-------------------\n* [ENHANCEMENT] Updated for compatibility with GravityBee's\n new directory structure (using ``.gravitybee`` directory).\n\n0.1.10 - 2018.05.25\n-------------------\n* [ENHANCEMENT] Updated for compatibility with GravityBee.\n\n0.1.9 - 2018.05.25\n------------------\n* [ENHANCEMENT] Code clean up.\n* [ENHANCEMENT] Changed SHA default to None.\n* [BUG FIX] Fixed bug in tests affecting SHA hash test.\n\n0.1.8 - 2018.05.14\n------------------\n* [ENHANCEMENT] Tag can now be based on info file written by\n GravityBee (app version from).\n* [ENHANCEMENT] Allow sha256 hashes to be added to label or uploaded\n as a separate file.\n* [ENHANCEMENT] Improved testing of SHA hash (downloading file and\n recalculating.\n* [ENHANCEMENT] Added ability to recreate releases in order to\n update the tag/commitish associated with the release. Otherwise,\n releases can be updated but will always point to the same tag/\n commitish.\n* [BUG FIX] Fixed various bugs with SHA hashes, creating releases,\n deleting tags, and revamped upload error handling.\n\n0.1.7 - 2018.05.11\n------------------\n* [BUG FIX] Many bug fixes improving compatibility with Windows.\n* [ENHANCEMENT] Use new GravityBee file (``gravitybee-files.json``).\n\n0.1.6 - 2018.05.10\n------------------\n* [BUG FIX] Wasn't deleting release asset if file given that didn't\n exist locally.\n* [ENHANCEMENT] Added --force option to delete tags and releases\n using pattern matching.\n\n0.1.5 - 2018.05.10\n------------------\n* [BUG FIX] Implemented file (release asset) delete\n* [ENHANCEMENT] Generally improved asset handling including SHA256 sums\n for files and better error handling\n\n0.1.4 - 2018.05.08\n------------------\n* [BUG FIX] Looked like an error was occuring because returning True\n instead of os.EX_OK.\n\n0.1.3 - 2018.05.07\n------------------\n* [ENHANCEMENT] Added POSIX-style filename pattern matching for\n cleaning up tags.\n\n0.1.2 - 2018.05.07\n------------------\n* Initial release!\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/plus3it/satsuki", "keywords": "", "license": "Apache Software License 2.0", "maintainer": "", "maintainer_email": "", "name": "satsuki", "package_url": "https://pypi.org/project/satsuki/", "platform": "Linux", "project_url": "https://pypi.org/project/satsuki/", "project_urls": { "Homepage": "https://github.com/plus3it/satsuki" }, "release_url": "https://pypi.org/project/satsuki/0.1.15/", "requires_dist": [ "click (==7.0)", "PyGithub (==1.43.5)", "requests (==2.21.0)" ], "requires_python": "", "summary": "Manage GitHub releases and release assets.", "version": "0.1.15" }, "last_serial": 5234115, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "edf6ee907cef0daa633108b1f7a6606e", "sha256": "36cb2dfaeb867c9d476bbafee6a3914920074f1e2f1e694edba821cb60586598" }, "downloads": -1, "filename": "satsuki-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "edf6ee907cef0daa633108b1f7a6606e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8535, "upload_time": "2018-04-30T18:50:22", "url": "https://files.pythonhosted.org/packages/64/cf/8045823f320e4ca7b192affa4f0ee23b8c52aaaee8415b0d3613efc1949f/satsuki-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6473db7cd0d7c9e6892cd14f2519a6a4", "sha256": "411b5db80684f23969da1ef47f2b90921b39a6817c87032b13dc3b86ee48bf19" }, "downloads": -1, "filename": "satsuki-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6473db7cd0d7c9e6892cd14f2519a6a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18962, "upload_time": "2018-04-30T18:50:25", "url": "https://files.pythonhosted.org/packages/9a/c6/6ab6f44a08e2afa26c372c7a4a243210bdae8761386268598f23aafd305e/satsuki-0.1.0.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "552cf35278bd16c2c23fa9303d2fa42f", "sha256": "e6095bb37ddfb17961ea70dd87e6417387680f367519e76a3a6b14fc2e83401f" }, "downloads": -1, "filename": "satsuki-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "552cf35278bd16c2c23fa9303d2fa42f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18739, "upload_time": "2018-05-29T16:24:46", "url": "https://files.pythonhosted.org/packages/e8/8e/ccd13120f7fbe5e110ef61f6bdbf9ea00ac713aa7b003a9ae73e5b420a8c/satsuki-0.1.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e78d19a5b69bb3eab69bf017c10c8dc", "sha256": "388f1d7da6b8473e2acdb1c11f462583839244e05b59c30c38d2e3739e02efaa" }, "downloads": -1, "filename": "satsuki-0.1.10.tar.gz", "has_sig": false, "md5_digest": "0e78d19a5b69bb3eab69bf017c10c8dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2086780, "upload_time": "2018-05-29T16:24:47", "url": "https://files.pythonhosted.org/packages/c1/bb/4b656dcd5b8ad0dfcf09727a061838a75e90f6d51c057cdc679e2008c28e/satsuki-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "58c390d9bf07baad705ddf4ec7315861", "sha256": "04a3633aba8fc8dde992963ca2f5ad9e175ec6e73c1071e098a7da6209dccb43" }, "downloads": -1, "filename": "satsuki-0.1.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "58c390d9bf07baad705ddf4ec7315861", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18755, "upload_time": "2018-06-05T15:27:42", "url": "https://files.pythonhosted.org/packages/6a/53/a2ab75db4ee7aff7613d21d88a6bf32ec4d2ef72fed9d7c13bba42b7945f/satsuki-0.1.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb87ad7618bf9a2b189996603794d3a5", "sha256": "0a5eacdaf8604c6d2857c41bd1d76833b312eb7d4b70275d069af44ba9c7baeb" }, "downloads": -1, "filename": "satsuki-0.1.11.tar.gz", "has_sig": false, "md5_digest": "eb87ad7618bf9a2b189996603794d3a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2086860, "upload_time": "2018-06-05T15:27:44", "url": "https://files.pythonhosted.org/packages/be/5d/bbde501100ff0137dc6d9df899a197ac20ab4d9e5fa9c37b9c7c4797e19e/satsuki-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "d98ae0a055d9481f8f3ddda8969b4b87", "sha256": "930298d1354f3e05bf38e549ca8bc352d1b11e67d0f008afd9bb1124eea47d2d" }, "downloads": -1, "filename": "satsuki-0.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d98ae0a055d9481f8f3ddda8969b4b87", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22844, "upload_time": "2019-01-29T16:24:07", "url": "https://files.pythonhosted.org/packages/3e/22/6746a1c7da47857fe927698ada566001fd43517e2c973a846ee1caca0371/satsuki-0.1.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ea639d7b13658b5f431f74131ea297c", "sha256": "4f32ebf316540e9d1165e4ad937adb7e67042f82e59a6ed4c611b0271e6c8572" }, "downloads": -1, "filename": "satsuki-0.1.12.tar.gz", "has_sig": false, "md5_digest": "2ea639d7b13658b5f431f74131ea297c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34578, "upload_time": "2019-01-29T16:24:08", "url": "https://files.pythonhosted.org/packages/44/23/73199480114d97474a1e773c47335d0d886595caa8e6528109dc114bf925/satsuki-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "323f5ec0da7dbc9db2a654c2d9f5bb05", "sha256": "2d850cd2ee01939514ff090e935de25786816d055da724142c9cfddb94e82afd" }, "downloads": -1, "filename": "satsuki-0.1.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "323f5ec0da7dbc9db2a654c2d9f5bb05", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22951, "upload_time": "2019-02-12T11:11:30", "url": "https://files.pythonhosted.org/packages/6f/dd/2ebb3bfd0fbb4f4c0088100011f55aa0222590f4962c14e90614ccd281bb/satsuki-0.1.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe85c4ccb0e62ec7a059ec304b764c25", "sha256": "6b99b5764a91dafcf9ec72143b97f88149be398d8b7b1869cf92de498f63092d" }, "downloads": -1, "filename": "satsuki-0.1.13.tar.gz", "has_sig": false, "md5_digest": "fe85c4ccb0e62ec7a059ec304b764c25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35898, "upload_time": "2019-02-12T11:11:31", "url": "https://files.pythonhosted.org/packages/0f/36/b466ef8fc8e344aeea629a4e2de3ad6220e29e94a612eeecbdd02db9afdb/satsuki-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "84463dff7994e41a8ba1ac466f261dba", "sha256": "81136e27fed3bf9aff0a34ec0dee0c80953f30a38fec61894bab58f753c49b56" }, "downloads": -1, "filename": "satsuki-0.1.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "84463dff7994e41a8ba1ac466f261dba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22946, "upload_time": "2019-04-22T14:17:22", "url": "https://files.pythonhosted.org/packages/43/39/4a6dbd68c78557f5aa67e8fd1abf643a82066491e37372244171d9a9f63e/satsuki-0.1.14-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6014e1deaa4cf3602d0251f05d746776", "sha256": "d6530fece7271c3e58ea60ec9fdcd58525786c954b789267520b7b334b71c4df" }, "downloads": -1, "filename": "satsuki-0.1.14.tar.gz", "has_sig": false, "md5_digest": "6014e1deaa4cf3602d0251f05d746776", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35895, "upload_time": "2019-04-22T14:17:24", "url": "https://files.pythonhosted.org/packages/47/ac/a03597528b82e776c570818ae3e5db7afc1a372e3d9a844494a00e42dde3/satsuki-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "90f75a1fba387d75f3b32a9435262603", "sha256": "a370d06d1d313d0b23a5bc2285f8f845c2caa1f26ece8612a25531bdf4abe5a5" }, "downloads": -1, "filename": "satsuki-0.1.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "90f75a1fba387d75f3b32a9435262603", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22945, "upload_time": "2019-05-06T17:47:13", "url": "https://files.pythonhosted.org/packages/05/0f/95916db51c8601afd9ebca945ab011c80eb5b6bd8abd937c69662513c034/satsuki-0.1.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "736bdfe9fd26eda3db5900b62c2f4ec7", "sha256": "3a7c55d97a3ff1a7634cf014cdbcb0227c209d138caae81d26edfe9af0ceafda" }, "downloads": -1, "filename": "satsuki-0.1.15.tar.gz", "has_sig": false, "md5_digest": "736bdfe9fd26eda3db5900b62c2f4ec7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35892, "upload_time": "2019-05-06T17:47:14", "url": "https://files.pythonhosted.org/packages/ac/37/668f1d62f109aed1b08b7e7a5651fe9a9c420145e83d9715e6aea171fc8d/satsuki-0.1.15.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "421505104559fb9e3f7b0267498bab77", "sha256": "1bd0306a20c66a2d3c7267eb9a343f00ff390bc143c21e182dd0ee4f3f88acaf" }, "downloads": -1, "filename": "satsuki-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "421505104559fb9e3f7b0267498bab77", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12322, "upload_time": "2018-05-07T23:23:57", "url": "https://files.pythonhosted.org/packages/ab/85/b14748b09a3502d5aa35bd8bee1f1790e07690ca78e7d7f61cc2da755f57/satsuki-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c042cb921fbdb57c492ff1b5c84262b7", "sha256": "7730f2548f70e4b917c8e8cba4eb86796ace1d2e56b9c1194c5e3a66ade32e64" }, "downloads": -1, "filename": "satsuki-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c042cb921fbdb57c492ff1b5c84262b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1051521, "upload_time": "2018-05-07T23:23:58", "url": "https://files.pythonhosted.org/packages/ab/b7/5c511b9dbc707074b171f58e15198fde83768b9805863dae486165cb3453/satsuki-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b84932508b71e9b99ca257e734c21ada", "sha256": "9faeab1548c8b966a7d9a12f03fc99fee06ea943776ea7da00efc7755e1775ff" }, "downloads": -1, "filename": "satsuki-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b84932508b71e9b99ca257e734c21ada", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12393, "upload_time": "2018-05-08T14:19:14", "url": "https://files.pythonhosted.org/packages/20/4a/b98dccf0c7c30d95145ecb5b8aafa5ebeb5da4ef6a25c8dd20e684e5b1db/satsuki-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51e1d1a8d008fe4799f5d38882c042f1", "sha256": "0be9e69403631e7a05b895770cb73eac95db455de354278e5fa4a13adbff81b0" }, "downloads": -1, "filename": "satsuki-0.1.4.tar.gz", "has_sig": false, "md5_digest": "51e1d1a8d008fe4799f5d38882c042f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1051759, "upload_time": "2018-05-08T14:19:15", "url": "https://files.pythonhosted.org/packages/0b/53/8cf81b8b842ae02790b12c9bc2b36d22f37bfa9a7ea487ce64def3a9ae71/satsuki-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "084583037897f3c19cfcd6e0da1db57f", "sha256": "d7531e1d6cd54986ca030a008958d70c9b52ff20f3f9f3899826c8f4d8abb7b2" }, "downloads": -1, "filename": "satsuki-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "084583037897f3c19cfcd6e0da1db57f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13501, "upload_time": "2018-05-10T17:08:21", "url": "https://files.pythonhosted.org/packages/77/f2/23f861d8e18cb0cb1758eb856664d2263c138b5706374ca6a41c30297727/satsuki-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "759189554105fdd6a1d8324c3ea5889d", "sha256": "6c088c22ee879bf0e52a1c0585e0e333a6428a2327df801cf3a380843af106b1" }, "downloads": -1, "filename": "satsuki-0.1.5.tar.gz", "has_sig": false, "md5_digest": "759189554105fdd6a1d8324c3ea5889d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1053067, "upload_time": "2018-05-10T17:08:22", "url": "https://files.pythonhosted.org/packages/08/32/0fcdf695aca06caa72f6f7d7ce8cd5821534580314e9f6ccffe98ca005a0/satsuki-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "9a2b8f7ac4303ae9a2ad4798d7befa8c", "sha256": "5c121d570fdc44c3b15b95d099c0e78e1954280603ae71782821130993ca4d7c" }, "downloads": -1, "filename": "satsuki-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9a2b8f7ac4303ae9a2ad4798d7befa8c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14322, "upload_time": "2018-05-10T19:55:03", "url": "https://files.pythonhosted.org/packages/05/2c/e38f5efc41e8b3b3aecad8a3dd1e5e1ae12a499eb8ede8fe55ecd251459a/satsuki-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46f1b5d4defc62940fdc9684ae0199e4", "sha256": "1eb224569cc192f704b02b17ba54d9b8901c37a83fdf13409cf7bef1c392ad74" }, "downloads": -1, "filename": "satsuki-0.1.6.tar.gz", "has_sig": false, "md5_digest": "46f1b5d4defc62940fdc9684ae0199e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1054509, "upload_time": "2018-05-10T19:55:04", "url": "https://files.pythonhosted.org/packages/44/c7/5be973da811bde1435e7600cfbd14d3c16b2457a3a44651cfb3e1a03a3e2/satsuki-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "f93e8217eadc7613810fc5b64d99b37b", "sha256": "cadcecd2991128d57621e41573d780de4b9a999cc235d1e41aef9f95d83cec5f" }, "downloads": -1, "filename": "satsuki-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f93e8217eadc7613810fc5b64d99b37b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14445, "upload_time": "2018-05-11T19:56:49", "url": "https://files.pythonhosted.org/packages/df/4d/46a3469cdd5c2ed96e6a5d24d633479e112bef6810d01eeed5627bc387db/satsuki-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46f27ee092712b981b244f22a3934855", "sha256": "ed848b81e60f951c09b70f1c17628bd8e0174c2cdb8bf9b9bb61245152561a45" }, "downloads": -1, "filename": "satsuki-0.1.7.tar.gz", "has_sig": false, "md5_digest": "46f27ee092712b981b244f22a3934855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1054712, "upload_time": "2018-05-11T19:56:50", "url": "https://files.pythonhosted.org/packages/e6/57/a48ca3fb49ff65df4addfab8be2f5c060bd1ec1cff7ee8c80331d8c1d1d9/satsuki-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "61de8b020c6d8d21fcfd748667e6ac0a", "sha256": "49c4921f0df3c4706aa1e8f1ee14e19a972f731ee91d6bf8d6da9f93979dd5dc" }, "downloads": -1, "filename": "satsuki-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61de8b020c6d8d21fcfd748667e6ac0a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18555, "upload_time": "2018-05-17T22:32:15", "url": "https://files.pythonhosted.org/packages/27/55/e1cb94396be9279112512c49c851934c537edb20799051e7a375df23a2bc/satsuki-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "782a29b3d030f0c7285a310c69eac000", "sha256": "c767b12898db9c5917268cd0612906d3a7d30cf45785ee272b329ae9b3c3cd78" }, "downloads": -1, "filename": "satsuki-0.1.8.tar.gz", "has_sig": false, "md5_digest": "782a29b3d030f0c7285a310c69eac000", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2086233, "upload_time": "2018-05-17T22:32:17", "url": "https://files.pythonhosted.org/packages/30/97/c6131cc16de66ca1a7b5fa9a3193c648bf042ffe82749af9743045a8536a/satsuki-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "4625e80b8c489e3e3c401c3394da021d", "sha256": "c13a508ebb0882c3e8e058242f5224740a1d1201cf4706f106cb03d38a536ee3" }, "downloads": -1, "filename": "satsuki-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4625e80b8c489e3e3c401c3394da021d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18724, "upload_time": "2018-05-25T12:46:22", "url": "https://files.pythonhosted.org/packages/79/d4/527ff9d48428d7fa0322a29649a209f1135c482565444e2ada1af9d4a77d/satsuki-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5350dc6fb6472a9459652a56ee2c8d2f", "sha256": "b5ec82641e5547a95a3917f40d56a12735e08e9d7bef863a8640e267355333ee" }, "downloads": -1, "filename": "satsuki-0.1.9.tar.gz", "has_sig": false, "md5_digest": "5350dc6fb6472a9459652a56ee2c8d2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2086748, "upload_time": "2018-05-25T12:46:24", "url": "https://files.pythonhosted.org/packages/23/ff/72290f91392073b2de2932e8e30a293a6e5e2959e2db84bec8217701587d/satsuki-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "90f75a1fba387d75f3b32a9435262603", "sha256": "a370d06d1d313d0b23a5bc2285f8f845c2caa1f26ece8612a25531bdf4abe5a5" }, "downloads": -1, "filename": "satsuki-0.1.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "90f75a1fba387d75f3b32a9435262603", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22945, "upload_time": "2019-05-06T17:47:13", "url": "https://files.pythonhosted.org/packages/05/0f/95916db51c8601afd9ebca945ab011c80eb5b6bd8abd937c69662513c034/satsuki-0.1.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "736bdfe9fd26eda3db5900b62c2f4ec7", "sha256": "3a7c55d97a3ff1a7634cf014cdbcb0227c209d138caae81d26edfe9af0ceafda" }, "downloads": -1, "filename": "satsuki-0.1.15.tar.gz", "has_sig": false, "md5_digest": "736bdfe9fd26eda3db5900b62c2f4ec7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35892, "upload_time": "2019-05-06T17:47:14", "url": "https://files.pythonhosted.org/packages/ac/37/668f1d62f109aed1b08b7e7a5651fe9a9c420145e83d9715e6aea171fc8d/satsuki-0.1.15.tar.gz" } ] }