{ "info": { "author": "pwwang", "author_email": "pwwang@pwwang.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# cmdy\nA handy package to run command from python\n\n## Installation\n```shell\n# latest version\npip install git+https://github.com/pwwang/cmdy\n# released version\npip install cmdy\n```\n\n## Why another one beyond `sh`?\n- `oncotator` not running with `sh`, no matter what I tried.\n- Unable to replace arguments with baked command, see example below:\n ```python\n from sh import ls\n ls = ls.bake(l = True)\n print(ls()) # ls -l\n # but now I somehow want to run `ls` (without `-l`) command with `ls()`\n ls(l = False) # not work\n ```\n- Unable to save configurations for commands, since commands have their solid preferences. \n- Unable to specify full path of an executable.\n- No pipe/redirection notations.\n\n## Basic usage\n```python\nfrom cmdy import ls\nprint(ls())\n```\n### With arguments\nLike `sh`, `cmdy` can have non-keyword arguments, but keyword arguments preferred.\n```python\nfrom cmdy import tar\ntar(\"cvf\", \"/tmp/test.tar\", \"/my/home/directory/\")\n```\n\n### With keyword arguments\n```python\ncurl(\"http://duckduckgo.com/\", o=\"page.html\", silent=True)\n# curl http://duckduckgo.com/ -o page.html --silent\n```\n__Order keyword arguments:__ \n```python\ncurl(\"http://duckduckgo.com/\", \"-o\", \"page.html\", \"--silent\")\n# or \nfrom collections import OrderedDict\ncurl(\"http://duckduckgo.com/\", OrderedDict([('o', 'page.html'), ('silent', True)]))\n```\n\n__Prefix and separator for keyword arguments:__ \n```python\nfrom cmdy import bedtools, bcftools, ls\nbedtools.intersect(wa = True, wb = True, a = 'query.bed', b = ['d1.bed', 'd2.bed', 'd3.bed'], names = ['d1', 'd2', 'd3'], sorted = True, _prefix = '-')\n#bedtools intersect -wa -wb -a query.bed -b d1.bed d2.bed d3.bed -names d1 d2 d3 -sorted\n\nbcftools.query(_ = ['a.vcf', 'b.vcf'], H = True, format = '%CHROM\\t%POS\\t%REF\\t%ALT\\n')\n# bcftools query --format '%CHROM\\t%POS\\t%REF\\t%ALT\\n' -H a.vcf b.vcf\n# _prefix defaults to 'auto' ('-' for short options, '--' for long)\n# You may also define arbitrary prefix:\n# command(a = 1, bc = 2, _prefix = '---')\n# command ---a 1 ---bc 2\n\nls(l = True, block_size = 'KB', _sep = 'auto')\n# ls -l --block-size=KB\n# _sep defaults to ' '. 'auto' means ' ' for short options, '=' for long\n```\n\n__Different combinations of prefices and separators in one command:__\n```python\nfrom cmdy import java\n# Note this is just an example for old verion picard. Picard is changing it's style\njava({'jar': 'picard.jar', '_prefix': '-', '_sep': ' '}, 'SortSam', I = 'input.bam', O = 'sorted.bam', SORTED_ORDER = 'coordinate', _raw = True, _prefix = '', _sep = '=')\n# java -jar picard.jar SortSam I=input.bam O=sorted.bam SORT_ORDER=coordinate\n# The first dictionary usees _prefix and _sep in itself if specified, otherwise uses the ones specified with kwargs.\n# _raw = True keeps SORTED_ORDER as it is, otherwise, it'll be transformed into SORTED-ORDER\n# This is useful when some command has option like '--block-size', but you can still use 'block_size' as keyword argument.\n```\n\n__Duplicated keys for list arguments:__\n```python\nfrom cmdy import sort\nsort(k = ['1,1', '2,2n'], _ = 'a.bed', _dupkey = True)\n# sort -k 1,1 -k 2,2n a.bed\n```\n\n## Return codes and exceptions\n```python\nfrom cmdy import x\nx()\n```\n\n```shell\n ... ...\n raise CmdyReturnCodeException(self)\n \u2502 \u2514\n \u2514 \ncmdy.CmdyReturnCodeException: Unexpected RETURN CODE 127, expecting: [0]\n\n [PID] 38254\n\n [CMD] x\n\n [STDERR] /bin/sh: x: command not found\n\n```\nYou can use try/catch to catch it: \n```python\nfrom cmdy import x, CmdyReturnCodeException\ntry:\n x()\nexcept CmdyReturnCodeException as ex\n print('Command returned %s' % ex.cmdy.rc)\n```\n\nYou can allow multiple return codes by: `x(_okcode = [0, 127])` or `x(_okcode = '0,127')`\n\n## Redirection\n```python\nfrom cmdy import ifconfig\nifconfig(_out=\"/tmp/interfaces\")\n# or you can use shell redirection notation\nifconfig(_out = \">\") > \"/tmp/interfaces\"\n# or \n# ifconfig(_out = \"/tmp/interfaces\")\n\n## append\nifconfig(_out = \">\") >> \"/tmp/interfaces\"\n# or\n# ifconfig(_out_ = \"/tmp/interfaces\")\n\n# redirect stderr\nifconfig(_err = \">\") > \"/tmp/ifconfig.errors\"\n# or ifconfig(_err = \"/tmp/ifconfig.errors\")\n```\n\n## Iteration on output\n```python \nfrom cmdy import tail\nfor line in tail(_ = 'test.txt', _iter = True):\n print(line)\n```\n\n## Background processes\nFor command you want to run it in non-block mode, you probably would like to use `_bg` keyword: \n```python\nfor line in tail(_ = 'test.txt', _bg = True, _iter = True):\n print(line)\n```\n\n```python\n# blocks\nsleep(3)\nprint(\"...3 seconds later\")\n\n# doesn't block\np = sleep(3, _bg=True)\nprint(\"prints immediately!\")\np.wait()\nprint(\"...and 3 seconds later\")\n```\n\nCallbacks for background processes: \n```python\nimport time\nfrom cmdy import sleep\ndef callback(cmdy):\n print(cmdy.rc)\np = sleep(3, _bg = callback)\np.wait()\n# prints 0\n```\n\n## Baking\n```python\nfrom cmdy import java\npicard = java.bake(dict(jar = 'picard.jar', _sep = ' ', _prefix = '-'))\n#picard.SortSam(...)\n```\n\nUnlike `sh`, `cmdy` holds the keyword arguments, and updates them while baked into a new command. This enables it to replace some arguments with the new baked command. \n```python\nfrom cmdy import ls\n\nls = ls.bake(l = True)\n# or ls = ls(l = True, _bake = True)\nls() # ls -l\n\n# I don't want -l anymore\nls(l = False)\n```\n\nNote that non-keyword arguments is not updatable. \n```python\nls = ls.bake('-l')\nls() # ls -l\n\n# Not work, still ls -l\nls(l = False)\n```\n\nBake the whole module: \n```python\nimport cmdy\ncmdy = cmdy(_fg = True)\n# all commands under new module is running at foreground (stdout = sys.stdout, stderr = stderr)\nfrom cmdy import ls\nls()\n```\n\n## Piping\n```python\n# get the permission column\nls(l = True, _pipe = True) | cut(f = 1, _fg = True)\n```\n\n## Sub-commands\n```python\nfrom cmdy import git\nprint(git.branch(v = True))\n```\n\n## Aliasing/Specifying full path of executables for commands\n```python\nfrom cmdy import fc_cache, python\nfc_cache(_exe = 'fc-cache', vf = '~/.fonts/', _prefix = '-')\n# fc-cache -vf ~/.fonts/\n\npython(_exe = '/home/user/miniconda3/bin/python3', version = True)\n# /home/user/miniconda3/bin/python3 --version\n```\nAlways alias `fc_cache` to `fc-cache` and point `python` to `/home/user/miniconda3/bin/python3`, add the following to your `~/.cmdy.ini` \n```ini\n[fc_cache]\n_exe = fc-cache\n\n[python]\n_exe = /home/user/miniconda3/bin/python3\n```\n\nThen you don't need to care about the paths any more:\n```python\nfrom cmdy import fc_cache, python\nfc_cache(vf = '~/.fonts/', _prefix = '-')\n# fc-cache -vf ~/.fonts/\n\npython(version = True)\n# /home/user/miniconda3/bin/python3 --version\n```\n\n## Configuration\n`cmdy` will first load default arguments:\n```python\n{\n '_okcode' : 0,\n '_exe' : None,\n '_sep' : ' ',\n '_prefix' : 'auto',\n '_dupkey' : False,\n '_bake' : False,\n '_iter' : False,\n '_pipe' : False,\n '_raw' : False,\n '_timeout' : 0,\n '_encoding': 'utf-8',\n '_bg' : False,\n '_fg' : False,\n '_out' : None,\n '_out_' : None,\n '_err' : None,\n '_err_' : None\n}\n```\nAnd then try to load `$HOME/.cmdy.ini`, `./.cmdy.ini` and environment variables starting with `CMDY_`, so you can overwrite the configurations with temporary environment variables.\n\nFor example, I want to always use raw keyword option:\n`~/.cmdy.ini` \n```ini\n[default]\n_raw: True\n```\n\n`ontotator.py`: \n```python\nfrom cmdy import oncotator\noncotator(log_name = '/path/to/log', ...)\n# oncotator --log_name LOG_NAME ...\n# you don't have to specify _raw = True any more.\n```\n\n__Override the settings with environment variable:__\n```bash\nexport CMDY_oncotator__raw=False\npython oncotator.py\n# will run:\n# oncotator --log-name LOG_NAME ...\n# ^\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/pwwang/cmdy", "keywords": "", "license": "MIT", "maintainer": "pwwang", "maintainer_email": "pwwang@pwwang.com", "name": "cmdy", "package_url": "https://pypi.org/project/cmdy/", "platform": "", "project_url": "https://pypi.org/project/cmdy/", "project_urls": { "Homepage": "https://github.com/pwwang/cmdy", "Repository": "https://github.com/pwwang/cmdy" }, "release_url": "https://pypi.org/project/cmdy/0.1.10/", "requires_dist": [ "modkit", "python-simpleconf" ], "requires_python": ">=3.6,<4.0", "summary": "A handy package to run command from python", "version": "0.1.10" }, "last_serial": 5706324, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5388eb42be8af7b52d09c0433064f686", "sha256": "b5efed2e45ba81f25db694fc0e4e11fcd804da37b2b24a4bd859f82e77caa9e0" }, "downloads": -1, "filename": "cmdy-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5388eb42be8af7b52d09c0433064f686", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5642, "upload_time": "2019-04-17T16:04:27", "url": "https://files.pythonhosted.org/packages/4b/5a/641ce640fbef2d5116488bf0979b6c84d01e6d6ca0d7512220080aa91c7c/cmdy-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a5bb79d0aa7f19af98806f15f046fc4", "sha256": "11aaf6764475301ef113a09111eddef3bd93d0bf23885b09fbefb8fb129bcd22" }, "downloads": -1, "filename": "cmdy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "7a5bb79d0aa7f19af98806f15f046fc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7217, "upload_time": "2019-04-17T16:04:29", "url": "https://files.pythonhosted.org/packages/ce/aa/04adcde024c3e54ecdf226b9a03ad43885de930e747f6d9ae031be860cb8/cmdy-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "2c4f40ea4002ed2a161e111016859fdf", "sha256": "f01668a20d667a3b5e28b3f1169706d129022f960d7a5fdeb20d9770713a1f8e" }, "downloads": -1, "filename": "cmdy-0.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2c4f40ea4002ed2a161e111016859fdf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7196, "upload_time": "2019-04-30T04:26:19", "url": "https://files.pythonhosted.org/packages/b6/3a/2a26005fd66a5a4f0c954c8e81ae71b514a6f838f6c6f144a4257cccf471/cmdy-0.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce89867344b36ac4c1adba407c38484a", "sha256": "781c1d8d6bfd7473a0104b81a291a19ff4754fdc95f6d10746b1e86f4a1fab0a" }, "downloads": -1, "filename": "cmdy-0.0.10.tar.gz", "has_sig": false, "md5_digest": "ce89867344b36ac4c1adba407c38484a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6168, "upload_time": "2019-04-30T04:26:23", "url": "https://files.pythonhosted.org/packages/c6/f3/50fd587e59cd30c52452fe506d59353f1f23fdc3ef7f1175b4188dbee8b7/cmdy-0.0.10.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "e80dd344e1cc1627a4a9c14249b6ad0b", "sha256": "a394834323287d4033dc21e4beeb852d0fd3524c01a0706f748ba6e7d6836234" }, "downloads": -1, "filename": "cmdy-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e80dd344e1cc1627a4a9c14249b6ad0b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5663, "upload_time": "2019-04-17T18:29:15", "url": "https://files.pythonhosted.org/packages/f7/5e/407cfa3581976a81ebcc87c2532e382a5969aa923b6b975503662cbd334f/cmdy-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "029d96905a305a636258f595dedd1ada", "sha256": "e344d7ffa748cd673f76dd181d9e5591fde40a1bc87e14c0d39386fc875decfb" }, "downloads": -1, "filename": "cmdy-0.0.2.tar.gz", "has_sig": false, "md5_digest": "029d96905a305a636258f595dedd1ada", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7233, "upload_time": "2019-04-17T18:29:17", "url": "https://files.pythonhosted.org/packages/74/c5/af2cd4141122b4019b6c158ceef724dbf52c1dc56752fa05d49d52547ac5/cmdy-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "b310523b775b265e03d382fb287351e2", "sha256": "01907fa1ffa0ab1462b2e55ac17010dfac4c2b8bea8a686ba2ec1c1052b190d2" }, "downloads": -1, "filename": "cmdy-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b310523b775b265e03d382fb287351e2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5668, "upload_time": "2019-04-17T23:10:46", "url": "https://files.pythonhosted.org/packages/ee/1a/c0942b501b1be33b3f58c06453098deb5630b8ecb2237d7d257ccece152f/cmdy-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fc40734903439264db2c6438eda93a6", "sha256": "21a030dff9a20f8087e5658fba7f002b775f4ba5884425e60d8a312a60c1e3d2" }, "downloads": -1, "filename": "cmdy-0.0.3.tar.gz", "has_sig": false, "md5_digest": "0fc40734903439264db2c6438eda93a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7353, "upload_time": "2019-04-17T23:10:48", "url": "https://files.pythonhosted.org/packages/85/86/8001a45a3ba0d5863cfce28b5f156ea7473205978477adb2ffa097d0f015/cmdy-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "5df63c73fe00321537a3cda0ea66267b", "sha256": "196b860561ee27eaadd4e2208832f49e7a25514a763e2fe201c17222250b196c" }, "downloads": -1, "filename": "cmdy-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5df63c73fe00321537a3cda0ea66267b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6130, "upload_time": "2019-04-19T23:04:44", "url": "https://files.pythonhosted.org/packages/85/d7/488d44fccda903ae12b470ed823e721aabe4f20778d749a6acb513f520f1/cmdy-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8373f7213b6f012da1a15113ccec6708", "sha256": "2c07d0982815b1a5287fe28e6b77ab650479efa29e430a1ca7567e813e3a02f1" }, "downloads": -1, "filename": "cmdy-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8373f7213b6f012da1a15113ccec6708", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8815, "upload_time": "2019-04-19T23:04:45", "url": "https://files.pythonhosted.org/packages/70/cb/8becb2ad8c9dc7cf43dd403e02032717dbb84c37414ce94cb341fe5d3c4d/cmdy-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "257a7937a344ac4861cfadadd32219c1", "sha256": "67e516d4671bfd59f81d339b720d65760c945e1a1a2554c2294d7ae016a3f680" }, "downloads": -1, "filename": "cmdy-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "257a7937a344ac4861cfadadd32219c1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7066, "upload_time": "2019-04-28T04:49:42", "url": "https://files.pythonhosted.org/packages/7e/84/ef60d741797502ed0a86e1fcb8461442304a6b21c824700914570ff98d57/cmdy-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d573d3a22c2481ebfe0862114672f6d", "sha256": "4fec64cdd4801c349822f4b93f865a1c698de609b05708209e3ad0869240f7bb" }, "downloads": -1, "filename": "cmdy-0.0.5.tar.gz", "has_sig": false, "md5_digest": "5d573d3a22c2481ebfe0862114672f6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6049, "upload_time": "2019-04-28T04:49:45", "url": "https://files.pythonhosted.org/packages/60/fe/fd26509cffa8ebc147053af84458b1224ee276406850553c48493b95630e/cmdy-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "76a1d2d852e173aff0baaaeaa1f0012d", "sha256": "b789aebb981ae86176c8afe4e33ef57ee8ca021cb0d20a13f5b49045b6d57844" }, "downloads": -1, "filename": "cmdy-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "76a1d2d852e173aff0baaaeaa1f0012d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7071, "upload_time": "2019-04-28T07:02:43", "url": "https://files.pythonhosted.org/packages/16/23/cf66f6e2a875f68f1266c41f227b8bcdbeb358ba6de30ebdd057a7efd29e/cmdy-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "126aa9b7a476ef2b9a770d31330399d2", "sha256": "94212540f2f9950ec144863aa4f3e65ed434bfa9963806cc241066c5a5e8e2c5" }, "downloads": -1, "filename": "cmdy-0.0.6.tar.gz", "has_sig": false, "md5_digest": "126aa9b7a476ef2b9a770d31330399d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6058, "upload_time": "2019-04-28T07:02:45", "url": "https://files.pythonhosted.org/packages/b6/19/0b7b676308b28abdd3a0497010b9e519f05a73dfecff25c23183a266a320/cmdy-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "b16237df0c96138d6825562d47000df4", "sha256": "705aeed2f415ef4719a14db836fecd13a5980acb98e5632b1d1122b5a9ea2a85" }, "downloads": -1, "filename": "cmdy-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b16237df0c96138d6825562d47000df4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6247, "upload_time": "2019-04-30T01:05:05", "url": "https://files.pythonhosted.org/packages/12/f5/44aaa313c24c1bd5495e5341f49c090699c213786c6e55ef14d44af3ee13/cmdy-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4598aeffc7450b47b59b5a5a632711ee", "sha256": "4f66099604bec2b8059ae47092b0b851a857f4c3b07193e982cedb908d28a748" }, "downloads": -1, "filename": "cmdy-0.0.7.tar.gz", "has_sig": false, "md5_digest": "4598aeffc7450b47b59b5a5a632711ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8974, "upload_time": "2019-04-30T01:05:09", "url": "https://files.pythonhosted.org/packages/fe/2a/605627eba068865f5b860b8f9f1025c6b8833c7213845a2a332448f498a4/cmdy-0.0.7.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "cc14b567ae25a389e135a4676d7c3641", "sha256": "cc560b416e37b5c550fd7af59be48fa058645b71e448dc1ede39614200b6758e" }, "downloads": -1, "filename": "cmdy-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cc14b567ae25a389e135a4676d7c3641", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6268, "upload_time": "2019-04-30T23:42:19", "url": "https://files.pythonhosted.org/packages/68/ef/8b15fccc1422be1d91fafea7cd688962444a7bd4064fa1f1283aa4c67057/cmdy-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a6db9cf84cb1f1d625c6819fc7083d8", "sha256": "c94b44849f87cbeb3ba6ea0771bcfc2e82c4dfc06c5af7d6ebcdba312e81cf8c" }, "downloads": -1, "filename": "cmdy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6a6db9cf84cb1f1d625c6819fc7083d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8981, "upload_time": "2019-04-30T23:42:21", "url": "https://files.pythonhosted.org/packages/ae/48/29278716c92a8e5a16d0d7e2cede9d7fc1c63a71525e41dab4f6a553656e/cmdy-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "029d3fe2b6911998367b1d333e2d0d2f", "sha256": "f012bd93f817ff572e0643c9cc735cc46b5c10b608ee7aec5343be13f5e56c32" }, "downloads": -1, "filename": "cmdy-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "029d3fe2b6911998367b1d333e2d0d2f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 10270, "upload_time": "2019-08-21T00:15:06", "url": "https://files.pythonhosted.org/packages/43/5e/a4806f117fdda4c18729006ac922694b7870f672bddd4451c82f69a95045/cmdy-0.1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe51def76b26f526495768722d08c115", "sha256": "4cab2bd679d7038b3401064b147068b4868979ae1eef9f80acee781efa033c49" }, "downloads": -1, "filename": "cmdy-0.1.10.tar.gz", "has_sig": false, "md5_digest": "fe51def76b26f526495768722d08c115", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 13618, "upload_time": "2019-08-21T00:15:08", "url": "https://files.pythonhosted.org/packages/1d/7c/2bed38e35d17987600b2c14f03c5b8b16d3dfb813460578857f8be42d2f1/cmdy-0.1.10.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "872bb22fabf271378748fb89b9ec1fad", "sha256": "ad08101166cb82b516ac27c3b55c0418b27501318ce253080d96b5c1829144ba" }, "downloads": -1, "filename": "cmdy-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "872bb22fabf271378748fb89b9ec1fad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6376, "upload_time": "2019-05-07T16:41:54", "url": "https://files.pythonhosted.org/packages/8a/63/df9ee379b46904f9f4693ddf180cd817f533cee06e219a7626894e2f31c9/cmdy-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc8deec31950879ab0078006cd9a792a", "sha256": "4fd38c5ae28aa95d98b7f362f1a27e2b828d0d2c1390e2eee6bf57079f13074d" }, "downloads": -1, "filename": "cmdy-0.1.2.tar.gz", "has_sig": false, "md5_digest": "bc8deec31950879ab0078006cd9a792a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9146, "upload_time": "2019-05-07T16:41:55", "url": "https://files.pythonhosted.org/packages/3e/59/7d8b5e57087bd74d0df2385f67a87b5fe27b0822fd059276b98a13dee1c4/cmdy-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "cf31aa542de5c7b51c1ad4c9973e33ec", "sha256": "b8ffaa327aea95596ea0f82a8b0551e27b3d442ef64956982699baf28a11cb02" }, "downloads": -1, "filename": "cmdy-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf31aa542de5c7b51c1ad4c9973e33ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6407, "upload_time": "2019-05-08T00:30:02", "url": "https://files.pythonhosted.org/packages/47/10/b85564a3c7cab2eeef90f49ac52e63d5daedf7a8f69595656fd39c673164/cmdy-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f92b6db393028f9eae4888bfee2ea93d", "sha256": "eef999e6a6219e72671ca8541d6d515ee179da63a8e49bd008faf66a8a4cc32e" }, "downloads": -1, "filename": "cmdy-0.1.3.tar.gz", "has_sig": false, "md5_digest": "f92b6db393028f9eae4888bfee2ea93d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9179, "upload_time": "2019-05-08T00:30:04", "url": "https://files.pythonhosted.org/packages/e6/b9/ec9e8f92be1430819ff733f748c6cd0ca18a64cf1bbc4a63b60378a0a778/cmdy-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "c4f9be2df142d92272686401bdbe1c2b", "sha256": "aeda0c67fc35afb797104c30f8314bcbe2a0aaf4df6e0c7bdf1fd3f8e588db36" }, "downloads": -1, "filename": "cmdy-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c4f9be2df142d92272686401bdbe1c2b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6423, "upload_time": "2019-05-15T18:14:58", "url": "https://files.pythonhosted.org/packages/f8/8b/2d10f30be201592af277edbb2546ba68881e0292ee434a2bca23f9fdfee8/cmdy-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67e19710a9feb78b2b18ba6b10f1306e", "sha256": "ceff9ca01a04266b02292fb5fd9a28c370b53d62974df9fdd00f3416221b1646" }, "downloads": -1, "filename": "cmdy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "67e19710a9feb78b2b18ba6b10f1306e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9184, "upload_time": "2019-05-15T18:14:59", "url": "https://files.pythonhosted.org/packages/4e/42/73fd545d9c2c474a5e84668095d291d631d27716b6c109255dd3698d32ae/cmdy-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "7c1c8e6e1b778923ede9aeda4243edd2", "sha256": "555d267badf007bc98cab6c998eb56b8fb5a2b7336033423d550cc0252fc9340" }, "downloads": -1, "filename": "cmdy-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c1c8e6e1b778923ede9aeda4243edd2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7264, "upload_time": "2019-05-16T18:38:36", "url": "https://files.pythonhosted.org/packages/5f/eb/a95c22f66ccf7f08f2d9927f94905f639283537d4c4abb1591cc5d16ff34/cmdy-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06a3f52f64a0e77d711d700a7cc6d7c4", "sha256": "72f1a2730e23921a5c00ccf53c7f57a8a286a3ec0cfdda114bda994137969ede" }, "downloads": -1, "filename": "cmdy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "06a3f52f64a0e77d711d700a7cc6d7c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9249, "upload_time": "2019-05-16T18:38:37", "url": "https://files.pythonhosted.org/packages/24/79/ec4f457301fa7d3f6a683cf675dd1d43cbee7b310bcc14aca121e9373e09/cmdy-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "e0ac0f14489cb652673a94a37a9ae979", "sha256": "7c5c23150540ce286f488db930574dd60a814b2ac612e856a4cc1640988cbddc" }, "downloads": -1, "filename": "cmdy-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0ac0f14489cb652673a94a37a9ae979", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7238, "upload_time": "2019-05-16T18:56:38", "url": "https://files.pythonhosted.org/packages/46/97/f76c3b62a2ddc65059a7d4b5e9681df6a8ac8ad27eb6b62a8007945e083e/cmdy-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f8f07cfd1fe399dfbe533e4184d464c", "sha256": "1605e315c6a1fe9a8ad4d765fff1a68b7cc5ff910568a0e5526129135c70af7b" }, "downloads": -1, "filename": "cmdy-0.1.6.tar.gz", "has_sig": false, "md5_digest": "8f8f07cfd1fe399dfbe533e4184d464c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9219, "upload_time": "2019-05-16T18:56:39", "url": "https://files.pythonhosted.org/packages/86/f0/1be2677cd548a6e25bf03a41e0a003f416a2f08d0415744bee3b14f1de02/cmdy-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8025e0fd3e648630f389a8b5e74d8ee2", "sha256": "8800880f8184d4607e1abbd444c45c1c1080ea6504584b2c78c1468d2e86aced" }, "downloads": -1, "filename": "cmdy-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8025e0fd3e648630f389a8b5e74d8ee2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7356, "upload_time": "2019-05-16T19:49:05", "url": "https://files.pythonhosted.org/packages/26/ae/ef10501e3e6d744d11cc3be87bcbe0a69fe3a1024189b5e34974cd22089b/cmdy-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2eae59ffce0706e7ffe7f9ceb6fc7976", "sha256": "09660096826f72dd3602cd008dbe0578756a9684f462919256aa34013f1eee6d" }, "downloads": -1, "filename": "cmdy-0.1.7.tar.gz", "has_sig": false, "md5_digest": "2eae59ffce0706e7ffe7f9ceb6fc7976", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9335, "upload_time": "2019-05-16T19:49:07", "url": "https://files.pythonhosted.org/packages/30/23/8f2c41e2513be6636f60aebf9917b2df0e8c9a1fd229879089b38bafb093/cmdy-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "a78f716f2ae4a436bc2b49d8d4cb5ad4", "sha256": "08d0a672fb93b27de482eebf240ea56b6f2ad778eacf4dfa874c6091f1f29732" }, "downloads": -1, "filename": "cmdy-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a78f716f2ae4a436bc2b49d8d4cb5ad4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7572, "upload_time": "2019-05-24T00:06:23", "url": "https://files.pythonhosted.org/packages/69/58/b836cb965a1e1b02cccf47db35badf7144f2a9c00a455bc7eb919fc69eda/cmdy-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0894b882b90d5dbe2094689599f3e28a", "sha256": "e14b7d296d0d2050bc6a55ad93adbe5e0c1ca56dad30daa66a90afe5fb05622a" }, "downloads": -1, "filename": "cmdy-0.1.8.tar.gz", "has_sig": false, "md5_digest": "0894b882b90d5dbe2094689599f3e28a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9546, "upload_time": "2019-05-24T00:06:24", "url": "https://files.pythonhosted.org/packages/ac/c7/ed88808542bc0718750ecb37eedfe870b13f1b5d814ba8650fc80f45bd6a/cmdy-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "09a08ddf6cdcd0526c0d50dd40ba7aa0", "sha256": "d77f74915ea00b1922145a6f634c25cc79916853fe0ed266b305b2f3b4aa0767" }, "downloads": -1, "filename": "cmdy-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "09a08ddf6cdcd0526c0d50dd40ba7aa0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7586, "upload_time": "2019-05-24T05:48:27", "url": "https://files.pythonhosted.org/packages/70/5f/405a8b0d56b619bba4adf68fe8655c9355c3e32adec923aa55f087bd2ed0/cmdy-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a06bb7892c3fd15f0ede1cc7c458bb8f", "sha256": "0ccf0a84845f50b5cd5b210b038e8b5aa517c454a2437291893c79c94d0f84b2" }, "downloads": -1, "filename": "cmdy-0.1.9.tar.gz", "has_sig": false, "md5_digest": "a06bb7892c3fd15f0ede1cc7c458bb8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9554, "upload_time": "2019-05-24T05:48:28", "url": "https://files.pythonhosted.org/packages/ee/68/b94dd7768eff5520e3011064dee07c91809946b5aac64299a643eaeb6833/cmdy-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "029d3fe2b6911998367b1d333e2d0d2f", "sha256": "f012bd93f817ff572e0643c9cc735cc46b5c10b608ee7aec5343be13f5e56c32" }, "downloads": -1, "filename": "cmdy-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "029d3fe2b6911998367b1d333e2d0d2f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 10270, "upload_time": "2019-08-21T00:15:06", "url": "https://files.pythonhosted.org/packages/43/5e/a4806f117fdda4c18729006ac922694b7870f672bddd4451c82f69a95045/cmdy-0.1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe51def76b26f526495768722d08c115", "sha256": "4cab2bd679d7038b3401064b147068b4868979ae1eef9f80acee781efa033c49" }, "downloads": -1, "filename": "cmdy-0.1.10.tar.gz", "has_sig": false, "md5_digest": "fe51def76b26f526495768722d08c115", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 13618, "upload_time": "2019-08-21T00:15:08", "url": "https://files.pythonhosted.org/packages/1d/7c/2bed38e35d17987600b2c14f03c5b8b16d3dfb813460578857f8be42d2f1/cmdy-0.1.10.tar.gz" } ] }