{ "info": { "author": "Mircea Ulinic", "author_email": "ping@mirceaulinic.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Framework :: IPython", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Cython", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: System :: Shells", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "ISalt: Interactive Salt Programming\n===================================\n\nISalt is an IPython style console to facilitate the debugging or even\ndevelopment of Salt code.\n\n.. image:: https://github.com/mirceaulinic/isalt/blob/master/cover.png\n\nSalt code typically makes use of a number of *dunder* (i.e., _d_ouble \n_under_score) variables such as ``__salt__``, ``__opts__``, ``__grains__``,\n``__proxy__``, or ``__pillar__``, etc., which give you quick access to various \nresources and features. They also have a different meaning depending on the \ncontext - for example, ``__opts__`` on the Minion side is a different object \nthan ``__opts__`` on the Master side; ``__salt__`` on the Minion side gives you\naccess to the list of Execution Modules, while ``__salt__`` on the Master side\nprovides the Runners, and so on.\n\nThe main difficulty when working with these variables is that they only make\nsense when actually running Salt and having a Master and eventually one or more\nMinions running. It often happens that you don't necessarily want to have these \nservices running when writing a new function (that use these dunders), or just\nwant to quickly debug something without pushing code to production.\n\nWith ISalt, you can easily get access to these variables, by simply executing\n``isalt``, e.g.,\n\n.. code-block:: bash\n\n $ isalt\n >>> __salt__['test.ping']()\n True\n >>>\n >>> __grains__['osfinger']\n 'Ubuntu-18.04'\n\nIn other words, ISalt is an enhanced IPython console which gives you access to\nthe Salt global variables typically used in Salt code.\n\nInstall\n-------\n\nISalt is distributed via PyPI, and you can install it by executing:\n\n.. code-block:: bash\n\n $ pip install isalt\n\nDependencies:\n\n- `salt `__\n- `IPython `__\n\nNo specific version for either of these packages, so it doesn't mess up with \nyour environment. It should normally work well with any version.\n\nUsage\n-----\n\nYou can configure various bits of data or conditionals using one or more of the \nfollowing options, with precedence in this order: ISalt configuration file, \nenvironment variables, and CLI arguments.\n\nOne of the most important details to keep in mind is the difference between \nrunning the code on the Minion side, versus Master side (where we can further\ndistinguish between code to be executed as a Runner, vs. Execution Module for\nan arbitrary Minion -- for the former you may need to provide the Minion ID\nusing the ``--minion-id`` CLI argument).\n\nTypically, when you install ISalt where you have a Salt Minion running, it \nshould be sufficient to execute just ``$ isalt``.\n\nWhen you want to use ISalt on the Master side, but to test Execution Modules,\nyou can run ``$ isalt --on-master``.\n\nWhen you're looking into evaluating Runner code, you can only do this one the\nMaster side, therefore, you'd need to start the console as ``$ isalt \n--master``.\n\nYou can check the complete list of CLI optional arguments by \n\n.. code-block:: bash\n\n $ isalt -h\n usage: isalt [-h] [--saltenv SALTENV] [--pillarenv PILLARENV] [-c CFG_FILE]\n [-e CFG_FILE_ENV_VAR] [--minion-cfg MINION_CFG_FILE]\n [--proxy-cfg PROXY_CFG_FILE] [--master-cfg MASTER_CFG_FILE]\n [--minion] [--proxytype PROXYTYPE] [--proxy] [--sproxy]\n [--master] [--local] [--minion-id MINION_ID] [--on-master]\n\n ISalt console\n\n optional arguments:\n -h, --help show this help message and exit\n --saltenv SALTENV Salt environment name.\n --pillarenv PILLARENV\n The Salt environment name to compile the Pillar from.\n -c CFG_FILE, --cfg-file CFG_FILE\n The absolute path to the ISalt config file.\n -e CFG_FILE_ENV_VAR, --env-var CFG_FILE_ENV_VAR\n The name of the environment variable pointing to the\n ISalt config file.\n --minion-cfg MINION_CFG_FILE\n The absolute path to the Minion config file.\n --proxy-cfg PROXY_CFG_FILE\n The absolute path to the Proxy Minion config file.\n --master-cfg MASTER_CFG_FILE\n The absolute path to the Master config file.\n --minion Prepare the Salt dunders for the Minion.\n --proxy Prepare the Salt dunders for the Proxy Minion.\n --sproxy Prepare the Salt dunders for the salt-sproxy (Master\n side).\n --master Prepare the Salt dunders for the Master.\n --local Override the Minion config and use the local client.\n This option loads the file roots config from the\n Master file.\n --minion-id MINION_ID\n The Minion ID to compile the Salt dunders for. This\n argument is optional, however it may fail when ISalt\n is not able to determine the Minion ID, or take it\n from the environment variable, etc.\n --on-minion Whether should compile the dunders for the Minion\n side, starting the ISalt console on the Minion\n machine. The main difference is that the Pillar and\n Grains are compiled locally, while when using --on-\n master, it's using the local cached data.\n --on-master Whether should compile the dunders for the Minion\n side, starting the ISalt console on the Master\n machine. This option is ignored when used in\n conjunction with --master.\n\nUsage Examples\n^^^^^^^^^^^^^^\n\nUsing ISalt on the Master\n+++++++++++++++++++++++++\n\nStart with ``isalt --master``. Remember that the ``__salt__`` dunder currently \nmaps to the Runner functions, and not to the execution modules.\n\n.. code-block:: bash\n\n $ isalt --master\n\n In [1]: # execute the ``test.sleep`` Runner:\n\n In [2]: # https://docs.saltstack.com/en/latest/ref/runners/all/salt.runners.test.html#module-salt.runners.test\n\n In [3]: __salt__['test.sleep'](1)\n 1\n Out[3]: True\n\n\nUsing ISalt on the Master, loading the (Proxy) Minion dunders\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nIn this mode, you need to specify the Minion ID to use and collect and compile\ndata for (otherwise it'll use local machine's hostname):\n\n.. code-block:: bash\n\n $ isalt --on-master --minion-id jerry\n\n.. note::\n\n You can equally specify the Minion ID in the proxy/minion configuration \n file, from ``--minion-cfg`` or ``--proxy-cfg`` options.\n\nFor Proxy Minions, you have to pass the ``--proxy`` CLI argument, e.g.,\n\n.. code-block:: bash\n\n $ isalt --on-master --minion-id edge-router --proxy\n\nFor Proxy Minions, in order to load the ``__salt__`` modules correctly, you may\nhave to provide the ``proxytype`` as well into the Proxy configuration file (by \ndefault at ``/etc/salt/proxy``, or a different path set using the \n``--proxy-cfg`` arg) - or using the ``--proxytype`` CLI argument, e.g.,\n\n``/etc/salt/proxy``\n\n.. code-block:: yaml\n\n proxy:\n proxytype: napalm\n\nAnd execute as ``isalt --on-master --proxy --minion-id jerry``.\n\nOr directly as ``isalt --on-master --proxytype napalm --minion-id jerry``.\n\nUsing ISalt on the (Proxy) Minion\n+++++++++++++++++++++++++++++++++\n\nThis is the default ISalt mode, and you no longer have to provide the Minion \nID, as it's collected from local machine, unless you want to use a specific \none. As always, you can have the Minion ID in the Proxy / Minion configuration \nfile, the ``ISALT_MINION_ID`` environment variable, or the ISalt configuration\nfile (as the ``minion_id`` option).\n\nExample:\n\n.. code-block:: bash\n\n $ echo $ISALT_MINION_ID\n jerry\n $ isalt\n\n In [1]: __opts__['id']\n Out[1]: 'jerry'\n\n.. note::\n\n The local Proxy / Minion key must be accepted by the Master. To avoid \n connecting to the Master, you can use the ``--local`` argument to start the\n Minion in `Masterless \n `__\n mode - you will however need to make sure that you point to the file (and\n pillar) roots you need as those won't be pulled from the Master.\n\n One good way to deal with this is pointing the ``file_roots`` option to the\n cache directory of the production Minion. For example, you have a Minion\n that is pulling the production files from the Master, and caching them \n under ``/var/cache/salt/minion/files/base`` (whatever would be your \n filesystem backend). Now, to use these files when starting ISalt in local \n mode, you can reference that dir as:\n\n ``/etc/salt/minion`` (excerpt)\n\n .. code-block:: yaml\n\n file_roots:\n base:\n - /var/cache/salt/minion/files/base\n\n Now, starting with ``isalt --local``, you still load your modules, states,\n and other files without connecting to the Master.\n\nUsing ISalt in conjunction with Salt Super Proxy (Master side)\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n.. note::\n\n This option requires salt-sproxy to be installed in the same environment as\n ISalt: ``pip install salt-sproxy``. For simplicity, you can, for example,\n install as: ``pip install isalt[sproxy]``.\n\nUsage example:\n\n.. code-block:: bash\n\n $ isalt --sproxy\n\nIn this interactive console, you have access to the usual Salt Master dunders, \nas well as the salt-sproxy features. As a shortcut, you have access to the \nsalt-sproxy core function, through the ``sproxy`` global variable:\n\n.. code-block:: bash\n\n >>> sproxy\n \n >>> sproxy('*', preview_target=True)\n ['router1',\n 'router2']\n\nIn a similar way, this facilitates the execution of any Salt function through\nsalt-sproxy, e.g.,\n\n.. code-block:: bash\n\n >>> sproxy('router1', function='test.ping', static=True)\n {'router1': True}\n >>>\n\n.. tip::\n\n For best results using salt-sproxy, it is recommended to pass the \n ``static=True`` argument.\n\nYou can also get into the *sproxy* mode by default, by setting the value \n``role: sproxy`` into the ISalt configuration file (see also the next \nparagraph).\n\n.. important::\n\n Check also the `salt-sproxy documentation \n `__ for more usage \n instructions and examples.\n\nISalt configuration file\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nEvery of the options presented above are available through the ISalt \nconfiguration file, by default ``/etc/salt/isalt``. To read the file from \na specific path, use the ``-c`` / ``--cfg-file`` args, e.g.,\n\n.. code-block:: bash\n\n $ isalt -c /path/to/isalt/config/file\n\nOr, alternative, using the ``ISALT_CFG_FILE`` environment variable, e.g.,\n\n.. code-block:: bash\n\n $ echo $ISALT_CFG_FILE\n /path/to/isalt/config/file\n $ isalt\n\nEven more, if you want to read the path to the config file from a different\nenvironment variable, use the ``-e`` / ``--env-var`` arg:\n\n.. code-block:: bash\n\n $ echo $ALTERNATIVE_ISALT_CFG_FILE\n /path/to/another/isalt/config/file\n $ isalt -e ALTERNATIVE_ISALT_CFG_FILE\n\nISalt configuration file example\n++++++++++++++++++++++++++++++++\n\n.. code-block:: yaml\n\n on_master: true\n proxytype: dummy\n proxy_cfg: /path/to/proxy/config\n minion_cfg: /path/to/minion/config\n master_cfg: /path/to/master/config\n\nWith the configuration file above, you can simplify the CLI usage, e.g., from \n``isalt --on-master --proxy-cfg /path/to/proxy/config --proxytype dummy \n--minion-id jerry`` to just ``isalt --minion-id jerry``, etc.\n\nEnvironment Variables\n^^^^^^^^^^^^^^^^^^^^^\n\n``ISALT_CFG_FILE``\n Absolute path to the ISalt configuration file.\n\n``ISALT_ROLE``\n The Salt system role. Choose between: ``master``, ``minion``, or ``proxy``.\n\n``ISALT_ON_MASTER``\n If you're running ISalt on the Master.\n\n``ISALT_MINION_ID``\n The Minion ID to use.\n\n``ISALT_PROXYTYPE``\n The Proxy Minion module name to use.\n\n``ISALT_MASTER_CONFIG``\n Absolute path to the Master configuration file.\n\n``ISALT_MINION_CONFIG``\n Absolute path to the Minion configuration file.\n\n``ISALT_PROXY_MINION_CONFIG``\n Absolute path to the Proxy Minion configuration file.\n\n``ISALT_USE_CACHED_PILLAR``\n When starting in Proxy / Minion mode, on the Master: whether to use the\n cached Pillars that may be already available for the specified Minion,\n or compile fresh data.\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/mirceaulinic/isalt", "keywords": "Salt, Interactive, Interpreter,Shell,Embedding", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "isalt", "package_url": "https://pypi.org/project/isalt/", "platform": "", "project_url": "https://pypi.org/project/isalt/", "project_urls": { "Homepage": "https://github.com/mirceaulinic/isalt" }, "release_url": "https://pypi.org/project/isalt/2021.2.2/", "requires_dist": [ "salt", "ipython", "salt-sproxy ; extra == 'sproxy'" ], "requires_python": "", "summary": "ISalt: Interactive Salt Programming", "version": "2021.2.2", "yanked": false, "yanked_reason": null }, "last_serial": 9464986, "releases": { "2019.10.0b1": [ { "comment_text": "", "digests": { "md5": "61575a4ae79a4c9cbe20d40476ffe00f", "sha256": "f2ed2582322d93dbe136d1c0bca918021934b507a24c089abd39372f7751c3cc" }, "downloads": -1, "filename": "isalt-2019.10.0b1.tar.gz", "has_sig": false, "md5_digest": "61575a4ae79a4c9cbe20d40476ffe00f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5950, "upload_time": "2019-10-21T10:20:14", "upload_time_iso_8601": "2019-10-21T10:20:14.998780Z", "url": "https://files.pythonhosted.org/packages/6c/56/097a074f7f0e5a374d3f3cd777cd9098a64615a79145e9aaca369c70d425/isalt-2019.10.0b1.tar.gz", "yanked": false, "yanked_reason": null } ], "2019.12.0": [ { "comment_text": "", "digests": { "md5": "99dc76ce2952052f0ca253b4e20ec6fa", "sha256": "c4ec080ca3c8dd0a746dbc605b9eec69e284626fbcba961fb13aea2cda1194ed" }, "downloads": -1, "filename": "isalt-2019.12.0-py3-none-any.whl", "has_sig": false, "md5_digest": "99dc76ce2952052f0ca253b4e20ec6fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10954, "upload_time": "2019-12-09T08:34:45", "upload_time_iso_8601": "2019-12-09T08:34:45.836991Z", "url": "https://files.pythonhosted.org/packages/41/f9/426f8a4f85f2eb55799eb865366a2091c7f85843d9fce14d1f2030348e76/isalt-2019.12.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9ca13dc527ab96218426bb9952ba7f5a", "sha256": "815dee9dd49585ad4d699bca61cb2103078250e860593ee8cf867d858ac574ec" }, "downloads": -1, "filename": "isalt-2019.12.0.tar.gz", "has_sig": false, "md5_digest": "9ca13dc527ab96218426bb9952ba7f5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6586, "upload_time": "2019-12-09T08:34:46", "upload_time_iso_8601": "2019-12-09T08:34:46.993050Z", "url": "https://files.pythonhosted.org/packages/ac/45/ca18d15525854067bce350a4e7c1ecf4638b008f0b06fac7a0aeb59714ed/isalt-2019.12.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2020.1.0": [ { "comment_text": "", "digests": { "md5": "f2be86ce2cd406b3a72c980055aecbac", "sha256": "ced818c78e3295f3e6da793a0dfd634274333b8a0d9bf48ebb0795051286adde" }, "downloads": -1, "filename": "isalt-2020.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f2be86ce2cd406b3a72c980055aecbac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16988, "upload_time": "2020-01-06T08:30:54", "upload_time_iso_8601": "2020-01-06T08:30:54.395007Z", "url": "https://files.pythonhosted.org/packages/e4/eb/2024413251073cf4063cbf3e3e0dbcb8830691721c44e039002d463e4a92/isalt-2020.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eaef165616b820ee126198008bdb78f1", "sha256": "e0dd89be32dedf7f7741d71927430a98b6160005db366d2f6474b770b82b8ad6" }, "downloads": -1, "filename": "isalt-2020.1.0.tar.gz", "has_sig": false, "md5_digest": "eaef165616b820ee126198008bdb78f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12967, "upload_time": "2020-01-06T08:30:56", "upload_time_iso_8601": "2020-01-06T08:30:56.094785Z", "url": "https://files.pythonhosted.org/packages/25/6b/92554aec475944df596357605391131d3e1a129fdaadbf92650fee2f6e06/isalt-2020.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2020.3.0": [ { "comment_text": "", "digests": { "md5": "3372cda74afa77607f272af38e2162ac", "sha256": "b562b7789391090b82b90e934c2b9eb414ee9cff67da5228dcb95d1d0f66f825" }, "downloads": -1, "filename": "isalt-2020.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3372cda74afa77607f272af38e2162ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17863, "upload_time": "2020-03-24T09:51:01", "upload_time_iso_8601": "2020-03-24T09:51:01.226954Z", "url": "https://files.pythonhosted.org/packages/79/e9/62d8f76768d7aeb6d4248ceb8df4e12cde5eabac3d563e44ff57f08d442d/isalt-2020.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "962ec5577d5a58ac046fc6254ac2306f", "sha256": "be6ba879ae64674a859af0ad100f5caf6acf66c7a8aac71a6c5e42b0896e381a" }, "downloads": -1, "filename": "isalt-2020.3.0.tar.gz", "has_sig": false, "md5_digest": "962ec5577d5a58ac046fc6254ac2306f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15223, "upload_time": "2020-03-24T09:51:02", "upload_time_iso_8601": "2020-03-24T09:51:02.586779Z", "url": "https://files.pythonhosted.org/packages/74/c8/0811b94e6c0da12a2961c9e7d38c2d46bafc5daeef8521937891ae89f4eb/isalt-2020.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2020.3.1": [ { "comment_text": "", "digests": { "md5": "d73eaa19c50da21dd1936923b50f7c8f", "sha256": "51658c4504feec00089a693bec0d379569569b263e5b96b8cb271641e056a110" }, "downloads": -1, "filename": "isalt-2020.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d73eaa19c50da21dd1936923b50f7c8f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17857, "upload_time": "2020-07-03T11:10:12", "upload_time_iso_8601": "2020-07-03T11:10:12.108204Z", "url": "https://files.pythonhosted.org/packages/ec/49/78088d5a490a218b462cb6dabe1505bf48e460da08956062fd9ead0cb308/isalt-2020.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c9dad0b537c993babab54ea2342f4ad0", "sha256": "7486201eabdd63f7b7b180c081d754314aee47c2708f114ab1c8fbf9b6bba734" }, "downloads": -1, "filename": "isalt-2020.3.1.tar.gz", "has_sig": false, "md5_digest": "c9dad0b537c993babab54ea2342f4ad0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15215, "upload_time": "2020-07-03T11:10:13", "upload_time_iso_8601": "2020-07-03T11:10:13.434692Z", "url": "https://files.pythonhosted.org/packages/d2/20/858e7a9fa15124846a966c362d50392252778ea7d261276c1a0212185661/isalt-2020.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2021.2.0": [ { "comment_text": "", "digests": { "md5": "d4466858b348016a593c9b7ec232634a", "sha256": "854b791c0e020e60e4375330940784b3731722e70ecf58928651223858a93ded" }, "downloads": -1, "filename": "isalt-2021.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d4466858b348016a593c9b7ec232634a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17983, "upload_time": "2021-02-17T16:18:53", "upload_time_iso_8601": "2021-02-17T16:18:53.659114Z", "url": "https://files.pythonhosted.org/packages/a9/b3/968d8b896643bdde114a05545379b1247d1c1bf71e3723c0640f04e1aa97/isalt-2021.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "223058dcec2477a048335a687d0d46be", "sha256": "78de86456a96fb791bca008dab91b88cbf3e1076b1ecc1aab4500a0acad27c39" }, "downloads": -1, "filename": "isalt-2021.2.0.tar.gz", "has_sig": false, "md5_digest": "223058dcec2477a048335a687d0d46be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16115, "upload_time": "2021-02-17T16:18:54", "upload_time_iso_8601": "2021-02-17T16:18:54.876487Z", "url": "https://files.pythonhosted.org/packages/d0/77/d51d035b9d5c4779687a40b85901bd555db392bdd723894bff36166debdd/isalt-2021.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2021.2.1": [ { "comment_text": "", "digests": { "md5": "28ed26de48bfe26316fe05b7c8286da5", "sha256": "9ce70f9c4018ca0a6ad54ccd71a4b4cbd4dd159bece66a346834e587bc74647b" }, "downloads": -1, "filename": "isalt-2021.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "28ed26de48bfe26316fe05b7c8286da5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18081, "upload_time": "2021-02-18T14:29:20", "upload_time_iso_8601": "2021-02-18T14:29:20.228945Z", "url": "https://files.pythonhosted.org/packages/6e/03/03d5f4205444286120103149b7c5ff170da5ba9d0580718bf137df030ff0/isalt-2021.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6bed4daf8dc77571ed880d8f3677ade8", "sha256": "8ed2dce5e367f3a537205e34f0337b502dbdcba0db2336bf5bc6bf8b2079ba4c" }, "downloads": -1, "filename": "isalt-2021.2.1.tar.gz", "has_sig": false, "md5_digest": "6bed4daf8dc77571ed880d8f3677ade8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16295, "upload_time": "2021-02-18T14:29:21", "upload_time_iso_8601": "2021-02-18T14:29:21.608534Z", "url": "https://files.pythonhosted.org/packages/75/ef/02d4d6b5964abfd63fc71341aa93400e6e9e80e814b913fc36d97cc9c202/isalt-2021.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2021.2.2": [ { "comment_text": "", "digests": { "md5": "a32c296fbdebc61bcd93d2506ed5b96e", "sha256": "9606402cde4970d192ca29e0c7f857d1644f03f78d32608e6f55935c1e48d915" }, "downloads": -1, "filename": "isalt-2021.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a32c296fbdebc61bcd93d2506ed5b96e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18219, "upload_time": "2021-02-19T11:38:16", "upload_time_iso_8601": "2021-02-19T11:38:16.213425Z", "url": "https://files.pythonhosted.org/packages/64/9c/d3db4032d918a985cd5c7d74197bc09b5affb7d0623e57aa50c5010149bf/isalt-2021.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "79e71907bfcaa46f1eea5aa300e4d33d", "sha256": "62130a0d61de65033a77fd231d32e95c12bdaec9503b8eba536ec3c0e7d56cd9" }, "downloads": -1, "filename": "isalt-2021.2.2.tar.gz", "has_sig": false, "md5_digest": "79e71907bfcaa46f1eea5aa300e4d33d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16389, "upload_time": "2021-02-19T11:38:17", "upload_time_iso_8601": "2021-02-19T11:38:17.605368Z", "url": "https://files.pythonhosted.org/packages/ee/90/698cab2bd866eaa1dc3af83fa4098d4b9689ac5f6a42dac1a91113a96fe7/isalt-2021.2.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a32c296fbdebc61bcd93d2506ed5b96e", "sha256": "9606402cde4970d192ca29e0c7f857d1644f03f78d32608e6f55935c1e48d915" }, "downloads": -1, "filename": "isalt-2021.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a32c296fbdebc61bcd93d2506ed5b96e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18219, "upload_time": "2021-02-19T11:38:16", "upload_time_iso_8601": "2021-02-19T11:38:16.213425Z", "url": "https://files.pythonhosted.org/packages/64/9c/d3db4032d918a985cd5c7d74197bc09b5affb7d0623e57aa50c5010149bf/isalt-2021.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "79e71907bfcaa46f1eea5aa300e4d33d", "sha256": "62130a0d61de65033a77fd231d32e95c12bdaec9503b8eba536ec3c0e7d56cd9" }, "downloads": -1, "filename": "isalt-2021.2.2.tar.gz", "has_sig": false, "md5_digest": "79e71907bfcaa46f1eea5aa300e4d33d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16389, "upload_time": "2021-02-19T11:38:17", "upload_time_iso_8601": "2021-02-19T11:38:17.605368Z", "url": "https://files.pythonhosted.org/packages/ee/90/698cab2bd866eaa1dc3af83fa4098d4b9689ac5f6a42dac1a91113a96fe7/isalt-2021.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }