{ "info": { "author": "Analytics Automated", "author_email": "daniel.buchan@ucl.ac.uk", "bugtrack_url": null, "classifiers": [], "description": "commandRunner\n=============\n\ncommandRunner is yet another package created to handle running commands,\nscripts or programs on the command line targetted at thread safe execution\nfor Celery. The simplest class lets you run anything locally on your machine.\nOther classes are targeted at Analytics and data processing platforms such as\nGrid Engine (and eventually HADOOP). The class attempts to run commands in a\nmoderately threadsafe way by requiring that you provide it with sufficient\ninformation that it can build a uniquely labeled temporary directory for all\ninput and output files. This means that this can play nicely with things like\nCelery workers.\n\nInstallation\n------------\n\nYou can install the required python modules with pip using the included\nrequirements.txt file.\n\nIf using R you must have a recent >3.0.0 installation of R and its development\nlibraries.\n\nIf you are using the DRMAA support you must be able to set the environment\nvariables\n\nDRMAA_LIBRARY_PATH\nSGE_ROOT\n\nRelease 0.8.7\n-------------\n\nThis release supports running commands on local unix shell and DRMAA compliant grid\nengine installs (ogs, soge and univa) and it can also run strings of python\ncode. Commands are built/interpolated via some simple rules described below.\n\nFuture\n------\n\nIn the future we'll provide classes to run commands over Hadoop, Octave, and\nSAS Server.\n\nBinary Execution Usage\n----------------------\n\ngeRunner and localRunner are capable of executing arbitrary binaries as\nthough run in a unix shell\n\nThis is the basic usage for running a binary using the local unix shell::\n\n from commandRunner.localRunner import *\n\n r = localRunner(tmp_id=\"ID_STRING\", tmp_path=,/tmp/\", out_glob=['file', ],\n command=\"ls /tmp\", input_data={DATA_DICT})\n r.prepare()\n exit_status = r.run_cmd(success_params=[0])\n r.tidy()\n print(r.output_data)\n\n__init__ initalises all the class variables needed and performs the command\nstring interpolation which allow you to parameterise the command.\n\nInterpolation rules work the following way. The command string is split in to\ntokens. The tokens are serched for specific control flags the define inputs,\noutput, paths and command parameters. Take the following call::\n\n r = localRunner(tmp_id=\"ID_STRING\",\n tmp_path=\"/tmp/\",\n in_glob=['.in', ]\n out_glob=['.file', ],\n params=[\"-a\",\"-l\", \"b\"]\n param_values={'b': {'value': 'this',\n 'spacing': True,\n 'switchless': False},\n }\n command=\"ls $P1 $P2 $P$ /tmp\",\n input_data={'input.in': 'some input data'},\n std_out_str=\"file.stdout\",\n identifier=\"string\"\n env_vars={\"str\":\"str\"},\n debug=False,)\n\nThis effectively builds the following command::\n\n ls -a -l b this /tmp > file.stdout\n\nCommand string interpolation accepts a range of control sequences which begin\nwith $.\n\nIf you provide a list of strings via the in_glob function variable these\nwill be made availabe in the command string using $I[int]. tmp_id string and\neach sequential entry in the in_glob list are concatenated. For tmp_id=\"this\"\nand in_glob=[\".in\", \".thing\", ] two strings are created this.in and this.thing\nand they can be refered to in the command string as $I1 and $I2.\n\nA near identical interpolation is carried out for the out_glob list providing\n$O[int]. With tmp_id=\"this\" and out_glob=['.file', ] string this.file will be\ncreated and can be refered to in the command string as $O1.\n\nCommand line parameters are more subtle. These will be available as $P[int]\nwhere each integer refers to a successive entry in the params list. If\nparam_values is not provided then the values in params will be interpolated\nas the appear in the params list. If params_values is provided then more\nsophisticated control of the param interpolation can be achieved. Providing\na value (12) means that a param entry (\"b\") will be interpolated as \"b 12\".\nSetting spacing to false suppresses the space, \"b12\" and setting switchless to\nTrue suppresses the param name \"12\".\n\nWe also provide a couple of convenience strings $TMP, $ID and $VALUE. There\nwill interpolate the contents of tmp_path, tmp_id and value_string respectively\n\nNext it takes input_data. This is a dict of {Filename:Data_string} values.\nIterating over, it writes the data to a file given the values in temp_path and\ntemp_id. So given the following dict and the values above::\n\n { \"test.file\" : \"THIS IS MY STRING OF DATA\"}\n\nwould result in a file with the path /tmp/ID_STRING/test.file\n\nenv_vars is a dict of key:value strings which is used to set the unix\nenvironment variables for the running command.\n\ndebug takes a boolean. this controls if the tmp directory created is world\nwriteable. Debug mode assumes you wish to leave behind the tmp dir to\nallow other process to access or analyse it.\n\nNote that only tmp_id, tmp_path and command are required. Omitting\ninput_data or out_glob assumes that there are respectively no input files to\nwrite or output files to gather and interpolations for $I[int], $O[int] and\n$P[int] will not reference anything.\n\nThe line r.run_cmd(success_params=[0]) runs the command string provided.\n\nOnce complete if out_globs have been provided and the files were output then\nthe contents of those files can be found in the dict r.output_data. which has\nthe same {Filename:Data_string} form as the input_data dict::\n\n{ \"output.file\" : \"THIS IS MY PROCESSED DATA\"}\n\nr.tidy() cleans up deleting any input and output files and the temporary\nworking directory. Any data in the output file is available in to r.output_data\n\nGrid Engine Quirks\n------------------\n\ngeRunner uses python DRMAA to submit jobs. A consequence of this that a command\nstring is not constructed in quite the same way. The first portion of the\ncommand string is split off as a command. Subsequence portions are tokenised\nand added to a params array to be passed to DRMAA\n\nThe Options dict is flattened to a key:value list. You can include or omit as\nmany of those as you'd like options as you like. Any instance of the string\n$I[int] and $O[int] in final args array will be interpolated as usual\n\nIf std_out_string is provided it will be used as\na file where the Grid Engine thread STDOUT will be captured::\n\n from commandRunner.geRunner import *\n\n r = geRunner(tmp_id=\"ID_STRING\", tmp_path=\"/tmp/\", out_glob=['.file'],\n command=\"ls -lah\", input_data={\"File.txt\": \"DATA\"},\n params = [\"-file\"]\n param_values = {'-file': {'value': '$O1',\n 'spacing': True,\n 'switchless': False},\n },\n std_out_string=\"std.out\")\n r.prepare()\n exit_status = r.run_cmd(success_params=[0])\n r.tidy()\n print(r.output_data)\n\nAlthough DRMAA functions differently you can think of this as effectively\nrun the following command (after following the interpolation rules)::\n\n ls -file out.file -lah > std.out\n\nScript Usage\n------------\n\ncommandRunner classes can also call code natively, pythonRunner will\ntake blocks of python code, rRunner will take blocks of R code. Both construct\na temp directory and place the input data there. Any code passed will then\nexecute as though is is running from the temp directory (via os.chdir).\n\nIn theory you can provide any arbitrarily large chunk of python or R code.\nIn practice you probably want to keeps these to short single function\nscripts for less than 100 lines as debugging is quite tricky given the\nlayer of abstraction.\n\nIt is also worth noting that accepted code forms a dialect of both python and\nR; the \" character is not valid and you must use the single quote to bound\nstrings.\n\nExecution by pythonRunner is somewhat different to geRunner and localRunner.\nInstances of this class take a script arg and not a command arg and .prepare()\nand .run_cmd() function somewhat differently::\n\n from commandRunner.pythonRunner import *\n\n r = pythonRunner(tmp_id=\"ID_STRING\",\n tmp_path=\"/tmp/\",\n in_glob=['.in', ]\n out_glob=['.file', ],\n params=[\"-a\",\"-l\", \"b\"]\n param_values={'b': {'value': 'this',\n 'spacing': True,\n 'switchless': False},\n }\n script=\"print(str(I1.read()))\",\n input_data={'input.in': 'some input data'},\n std_out_str=\"file.stdout\",\n identifier=\"string\"\n env_vars={\"str\":\"str\"},\n )\n r.prepare()\n exit_status = r.run_cmd()\n r.tidy()\n print(r.output_data)\n\nAs before input_data is a dict of 'file name': 'data' pairs which will be\nwritten to a directory specified by tmp_path+tmp_id+\"/\" (i.e. /tmp/ID_STRING/).\nin_glob and out_glob specify a set of file handles that will be opened for you\nso you do not have to open them in your provided script. in_globs should be\nmatched to file names in input_data. In the example above the in_glob for '.in'\nwill open the input.in data file and that will be available as a variable named\nI1. If there were more entries in in_glob they would be named in sequence I1, I2\nI3 etc... out_glob functionas as a form of promise that your script will write\nto some output files. For each entry in out_glob a filehandle for writing is\nopened using the tmp_id as the file name. As above O1 would open a file\ncalled ID_STRING.file\n\nParams are also created as variables, named P1, P2, P3, etc... These refer in\norder to the values in the params list. If there is not an entry for the\nparam in param_values these variables are set to True. If there is an entry\nin the param_values arg then the variable will be a dict with a key value\npair that gives you the name and the value. In the example above P3 is a\ndict of {'b': \"this\"}, In this way some runtime configuration can be passed in\nto the script.\n\nAnything provided to env_vars will be add to the script environment using\nadditions to os.environ[]\n\nscript is an argument that takes any valid python string. In the example above\nit reads the contents from the I1 filehandle ('some input data') and then\nechos that to stdout. In theory you can place any sized piece of python here\nbut smaller scripts made up of a handful of lines are probably more\nane/sensible. Note that escape characters will need to be double escaped (\\\\n\nnot \\n)\n\nWhen .prepare() is called a temp directory is build and the input_data files\nare written to it. Next various filehandles and param variables are composed\nand appended to the provided script. Once the new script is prepared compile()\nis called on it to ensure the script is a valid python string. Assuming\n.prepare() is succesful you can then call .run_cmd().\n\nrun_cmd() creates a new python subprocess, runs the script in this child\nprocess (insulating it from the namespace of the parent process) and captures\nany writes to stdout and stderr.\n\nOnce complete you can find the outputs in the .output_data dict. There will\nbe and entry for stdout with a key named for your std_out_str. There will also\nbe a key for stderr named tmp_id+\".err\", in this example \"ID_STRING.err\". As\nper local runner there will be a key for every file that matched the provided\nout_glob list as long as the file has a non-zero size. If you do not\nwrite to one of the provided output file handles they will not be collected\nin output_data\n\nR Scripts\n---------\n\nrRunner makes use of rpy2 to execute R code. You may need to amend your\nLD_LIBRARY_PATH\nhttps://stats.stackexchange.com/questions/6056/problems-with-librblas-so-on-ubuntu-with-rpy2\n\nThe API and broad functioning is roughly similar to the pythonRunner. Unlike\npythonRunner code is not checked for syntactic correctness before execution.\nSo any errors will occur at runtime for the code you provide.\n\nFile handles (I1, I2, ... and O1, O2 etc...) are available as above. These\nare opened with R's base file() function. You may wish instead to override\nthese with things like csv.reader() where it is more convenient. Params (P1,\nP2, etc...) also exist, name:value pairings are avaiable R lists() rather\nthan python dicts.\n\nAnything provided to env_vars will be add to the script environment using\nSys.setenv()\n\nUnlike the python case it is imperative you check the that the error data in\noutput_data is empty before assuming your R code ran successfully. As above\nyou can find the outputs from the stdout of your script in the output_data\nvariable. We leave it to you\n\n\nTests\n-----\n\nBest to run these 1 suite at a time, geRunner tests will fail if you do not\nhave Grid Engine installed, DRMAA_LIBRARY_PATH set and SGE_ROOT set, for example::\n\n export DRMAA_LIBRARY_PATH=/opt/ogs_src/GE2011.11/lib/linux-x64/libdrmaa.so\n export SGE_ROOT=/opt/ogs_src/GE2011.11/\n\nRun tests with::\n\n python setup.py test -s tests/test_commandRunner.py\n python setup.py test -s tests/test_localRunner.py\n python setup.py test -s tests/test_geRunner.py\n python setup.py test -s tests/test_pythonRunner.py\n python setup.py test -s tests/test_rRunner.py\n\nTODO\n----\n\n1. Implement hadoopRunner for running command on Hadoop\n2. Implement sasRunner for a SAS backend\n3. Implement octaveRunner for Octave backend\n4. matlab? mathematica?\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AnalyticsAutomated/commandRunner.git", "keywords": "", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "commandRunner", "package_url": "https://pypi.org/project/commandRunner/", "platform": "", "project_url": "https://pypi.org/project/commandRunner/", "project_urls": { "Homepage": "https://github.com/AnalyticsAutomated/commandRunner.git" }, "release_url": "https://pypi.org/project/commandRunner/0.8.12/", "requires_dist": null, "requires_python": "", "summary": "Allows thread safe, object oriented running of commandline operations and blocks of code", "version": "0.8.12" }, "last_serial": 5461552, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "15176534da087a2746e86051cfc8c85a", "sha256": "8159afcccaf394f1191267085df754ae2a38b1f915f8a88b43a69609cf2ee8b9" }, "downloads": -1, "filename": "commandRunner-0.1.2.tar.gz", "has_sig": false, "md5_digest": "15176534da087a2746e86051cfc8c85a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3799, "upload_time": "2015-06-30T16:38:16", "url": "https://files.pythonhosted.org/packages/87/42/e0ebf15e41012cdb17e87da2384be475c7d75815489ec9a9c8ce7241288e/commandRunner-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5878b8f6b0c47c36ebb1c3b7ce678326", "sha256": "d0b1b981dc6f930e63a51c24e24a15cd08969653bb16499d8a2c1afc679c45f3" }, "downloads": -1, "filename": "commandRunner-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5878b8f6b0c47c36ebb1c3b7ce678326", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3814, "upload_time": "2015-06-30T16:43:56", "url": "https://files.pythonhosted.org/packages/94/b5/f75fac860763c645c5f6754390ee7c9a0feee85d14df45a9035b68d9a439/commandRunner-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "0eaa0ff51d0b363fc3d1ab050212aca4", "sha256": "8c9550321e9d0edd32c4f9d5fe431c6a2f76ee3407294ddf0dc04e370f2e3f6b" }, "downloads": -1, "filename": "commandRunner-0.1.4.tar.gz", "has_sig": false, "md5_digest": "0eaa0ff51d0b363fc3d1ab050212aca4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3075, "upload_time": "2015-06-30T18:22:21", "url": "https://files.pythonhosted.org/packages/24/c4/45ff308d1d565eb3a3a93105707db8e4fe9bdba48ae103ca310ef9e00270/commandRunner-0.1.4.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "81cbbde2f14e5669ec08e01b5b6b076e", "sha256": "ef6e7b6ba15c0e7f943ba27a8fd2e96f7f8a8380eac6ded5eabce7d5ae64bf00" }, "downloads": -1, "filename": "commandRunner-0.2.tar.gz", "has_sig": false, "md5_digest": "81cbbde2f14e5669ec08e01b5b6b076e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3439, "upload_time": "2015-07-01T11:37:32", "url": "https://files.pythonhosted.org/packages/a8/68/71c54326bc66b085b06a4c4a28a056ff03d83fa0f2bf7c76f3b23633668b/commandRunner-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "7f1db6e0cfd5a9621125e66a22ce4cba", "sha256": "088376e23bcaa0b7597fa66d276aefcda6520871aeed0c2eeee4035f4cccd2b2" }, "downloads": -1, "filename": "commandRunner-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7f1db6e0cfd5a9621125e66a22ce4cba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3567, "upload_time": "2015-07-01T11:40:37", "url": "https://files.pythonhosted.org/packages/1c/87/20027f5f49e8c5afd9572e1cfa463dec9ea76195227ef8e9e7f0ba2d04ff/commandRunner-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "b2406e3403fa2c79f52074c84b3cc74c", "sha256": "4c9fd83cd7c9757dc39099a1fbdcbd5b6f5e096acd8a2b20054b142e42e8d5e6" }, "downloads": -1, "filename": "commandRunner-0.2.2.tar.gz", "has_sig": false, "md5_digest": "b2406e3403fa2c79f52074c84b3cc74c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3654, "upload_time": "2015-07-01T11:44:44", "url": "https://files.pythonhosted.org/packages/d5/62/eeb34194133125b180614adeea360b4cb13fc48f945f50f8c35386704a45/commandRunner-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "12e6a673fb6321dc334d3daa9f0ac0f6", "sha256": "ec5d7cc22b97e379871fd9998d79ceb00aae74b9626dea35ac33cb1278d7633d" }, "downloads": -1, "filename": "commandRunner-0.2.3.tar.gz", "has_sig": false, "md5_digest": "12e6a673fb6321dc334d3daa9f0ac0f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3742, "upload_time": "2015-07-01T16:31:06", "url": "https://files.pythonhosted.org/packages/5b/bc/7c21ec696f4757757054077080c7ab8014c168abc905227358fdb03c3a4b/commandRunner-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "7128e22fc769091218dbb3c496904e90", "sha256": "83c8138a9eb5f1cd9a9c1a4f4ce29bd66baa7c1beb7dcca429dfacc30345290d" }, "downloads": -1, "filename": "commandRunner-0.2.4.tar.gz", "has_sig": false, "md5_digest": "7128e22fc769091218dbb3c496904e90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3743, "upload_time": "2015-07-01T16:48:30", "url": "https://files.pythonhosted.org/packages/4b/fe/4bd0050eceb64901f195cfe510b702703708fc76c17b1e4b939d0269bfb8/commandRunner-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "2ed37732074da0dbb50fb65a353cdfd4", "sha256": "600d0375be76066216ae48a1285aa52df7ef8e87c31ce07a7025739f58f3f8ec" }, "downloads": -1, "filename": "commandRunner-0.2.5.tar.gz", "has_sig": false, "md5_digest": "2ed37732074da0dbb50fb65a353cdfd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3736, "upload_time": "2015-07-01T16:51:21", "url": "https://files.pythonhosted.org/packages/de/1f/2791751c5138c0527dcdaadf233e0c2bd8c6c6a5944747e01f82ec48022e/commandRunner-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "b1efd87340c1c814d4bfa778a41be869", "sha256": "b61c4f161a9bd9a4e772eb1ad6a6e319e8a41535a8a74102dadda4884f2c3dfa" }, "downloads": -1, "filename": "commandRunner-0.2.6.tar.gz", "has_sig": false, "md5_digest": "b1efd87340c1c814d4bfa778a41be869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3764, "upload_time": "2015-07-03T11:27:17", "url": "https://files.pythonhosted.org/packages/2a/37/ca79bb0ddc68c0a83fae87d3be0ba1112f6d27c5978092fc37c6689ae861/commandRunner-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "3eacfba3d383ad53656d4920ee24f012", "sha256": "bb4c853593d051e17c0e966831040a5ea7b2accbc29ddd2d15564a730d441ca6" }, "downloads": -1, "filename": "commandRunner-0.2.7.tar.gz", "has_sig": false, "md5_digest": "3eacfba3d383ad53656d4920ee24f012", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3734, "upload_time": "2015-07-06T14:28:06", "url": "https://files.pythonhosted.org/packages/ca/29/015cbb892675ef5cdb050480487aab75891f80743322ea1186e47913641c/commandRunner-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "ca4e1044cddc186b455a2419873ea52a", "sha256": "fee7537e57c25086c10f57aa18ddf205a48df2ca4526586c3aa6703b876bbbe4" }, "downloads": -1, "filename": "commandRunner-0.2.8.tar.gz", "has_sig": false, "md5_digest": "ca4e1044cddc186b455a2419873ea52a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3814, "upload_time": "2015-07-06T15:00:25", "url": "https://files.pythonhosted.org/packages/3e/f8/16aefb09610172b21844f050be6b3b9618846f0549454a76e0c33e9b2849/commandRunner-0.2.8.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "b5efce1e926af63a905d3281b2d84aae", "sha256": "03a5712102160eab579d684b52f0a37623dd9218d98ebb8af490056b63737b6c" }, "downloads": -1, "filename": "commandRunner-0.2.9.tar.gz", "has_sig": false, "md5_digest": "b5efce1e926af63a905d3281b2d84aae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4089, "upload_time": "2015-07-13T13:10:54", "url": "https://files.pythonhosted.org/packages/66/8f/6c166a7928c5428204040342f97dc3b85add0559eda43a9c855c3b2b4cca/commandRunner-0.2.9.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b35f973983ac9e9e19fb2ea11600cb67", "sha256": "ec52ee486a0afc80eb1ac5b36cc62b9868e72591bdcdbe013f356d7099ba9012" }, "downloads": -1, "filename": "commandRunner-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b35f973983ac9e9e19fb2ea11600cb67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5347, "upload_time": "2015-10-09T16:30:57", "url": "https://files.pythonhosted.org/packages/1c/ad/20498706179144915ae7c9c07572576e3432f451b257a237758179935fd3/commandRunner-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "262da605dd4fb1bca1ca8e10c9184357", "sha256": "5553a38d39ad24b685cb375f1144d3c6ea9c1b6658d90d1bb99a063044ff3855" }, "downloads": -1, "filename": "commandRunner-0.3.1.tar.gz", "has_sig": false, "md5_digest": "262da605dd4fb1bca1ca8e10c9184357", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5271, "upload_time": "2015-10-09T16:32:09", "url": "https://files.pythonhosted.org/packages/68/e0/c22f3112eebcca121bb1349fe09e7ccda52f746c93308cdbf20afff3c638/commandRunner-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "a52bdeaa0c400089db0678861d8f12e7", "sha256": "e80079791b7c8f3e8ced5aff040dc3098513a4ac27a60b0a97fbb83c8d401aa3" }, "downloads": -1, "filename": "commandRunner-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a52bdeaa0c400089db0678861d8f12e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5250, "upload_time": "2015-10-09T16:33:54", "url": "https://files.pythonhosted.org/packages/14/b4/615e017b63c3a270d9c856b6ec323805a555da5b7e31afd2711d7feb2df7/commandRunner-0.3.2.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "da78b8ca0f93e59866123c91b32e2bc2", "sha256": "6a7630d75feecc6511dc0ba3324e2d6d1c8dba61bc01a77b0697ef36ad55d380" }, "downloads": -1, "filename": "commandRunner-0.3.4.tar.gz", "has_sig": false, "md5_digest": "da78b8ca0f93e59866123c91b32e2bc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5279, "upload_time": "2015-10-09T16:35:51", "url": "https://files.pythonhosted.org/packages/bf/ef/1b54f99697b769ab18e82eb20974ad7063aebb6c2041ad44b99c10f931cc/commandRunner-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "3b864b52ae91647e768ab02d1864a168", "sha256": "0521c70aadfaf25c7b10f25e53d72c800345112f53ace517c28891ae79cde210" }, "downloads": -1, "filename": "commandRunner-0.3.5.tar.gz", "has_sig": false, "md5_digest": "3b864b52ae91647e768ab02d1864a168", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5379, "upload_time": "2015-10-09T19:53:44", "url": "https://files.pythonhosted.org/packages/52/80/052da9441234b478f7518a453699aa82e74e3213a0dd12201aa7ef8b5cf1/commandRunner-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "fc527520933ac7b9852792f83934570d", "sha256": "975f9452321a3ccbc6541a9e45b0623071a1590fabb4422195b410614655b229" }, "downloads": -1, "filename": "commandRunner-0.3.6.tar.gz", "has_sig": false, "md5_digest": "fc527520933ac7b9852792f83934570d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5476, "upload_time": "2015-10-27T14:38:58", "url": "https://files.pythonhosted.org/packages/01/42/51b0e4cb1f4b6099f83f3851fa8447b79089006d7895ad459b65a8026054/commandRunner-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "9f6a3e9d88bba7f262ead96f4af79e79", "sha256": "8db99554e1327ebc20d0d2c4a861a87027391ffdfe7ab386077e01f466351f8b" }, "downloads": -1, "filename": "commandRunner-0.3.7.tar.gz", "has_sig": false, "md5_digest": "9f6a3e9d88bba7f262ead96f4af79e79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5802, "upload_time": "2015-10-28T15:44:01", "url": "https://files.pythonhosted.org/packages/f6/c9/382b77d0b64a023a023217262968aca456070a82ddc6803fbe9cffe1c487/commandRunner-0.3.7.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "4a872752491d606c5cc8b9d0040064a2", "sha256": "1040a1b9befc32ca519efd8f6787628cc797446efa8e299534e54f5a674f0e2d" }, "downloads": -1, "filename": "commandRunner-0.4.0.tar.gz", "has_sig": false, "md5_digest": "4a872752491d606c5cc8b9d0040064a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5806, "upload_time": "2015-10-29T14:20:09", "url": "https://files.pythonhosted.org/packages/32/4f/6b1682a4873b822b1004632ff65cee9d92dd4d47c2d192836575d23c1a76/commandRunner-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "43ae7f40ec718f932957014ae7c41da1", "sha256": "ee0df315c3d76d65e05f1bab9e326ff78db05043ed5412eb7cc2db6317dd18f7" }, "downloads": -1, "filename": "commandRunner-0.4.1.tar.gz", "has_sig": false, "md5_digest": "43ae7f40ec718f932957014ae7c41da1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5818, "upload_time": "2015-11-10T12:50:58", "url": "https://files.pythonhosted.org/packages/4c/7f/b74f8ed4864855f3272eef0df323e1fcaa3617636010df6b7a75f199fd0b/commandRunner-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "a059a45b92c5cddb511f7e59c62040f9", "sha256": "5bbe38af79428363e392f844866189427c099f937240add1cf637abd8dad47cf" }, "downloads": -1, "filename": "commandRunner-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a059a45b92c5cddb511f7e59c62040f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5809, "upload_time": "2016-02-08T17:01:01", "url": "https://files.pythonhosted.org/packages/b4/db/fcf1459c02815b3b92a62585729ac0896656657a25fab007aefddbdf6b58/commandRunner-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "c6aa7c920e376f7c5b04e99dfc19a72a", "sha256": "ea3d7bf56c5a009f2df9ebdc1618bfb7169ad831a580819b795fa3a2bb6fa24c" }, "downloads": -1, "filename": "commandRunner-0.4.3.tar.gz", "has_sig": false, "md5_digest": "c6aa7c920e376f7c5b04e99dfc19a72a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5893, "upload_time": "2016-03-24T14:28:28", "url": "https://files.pythonhosted.org/packages/10/ce/6986c6e953058b0090afe88a28f034a2d25b8c8a014b81ce4de899f31085/commandRunner-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "07840a7e727dbbc3f00ac16bcf9bece3", "sha256": "48b88e5b1d7af83c4d2d3791ec994814bd964d2e524f73c931f7fc80c835d33a" }, "downloads": -1, "filename": "commandRunner-0.4.4.tar.gz", "has_sig": false, "md5_digest": "07840a7e727dbbc3f00ac16bcf9bece3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5981, "upload_time": "2016-03-24T14:31:28", "url": "https://files.pythonhosted.org/packages/a1/d8/ea7c882521340b798d8472915bbf9675dcec5f3d45cff1de9aed5520a603/commandRunner-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "fb93ee96121eab5c091bfce1cb36ed67", "sha256": "8000f4172447c9e5d3d90da7774a6410da1de528e0e7757b6eb12f4af73c9d07" }, "downloads": -1, "filename": "commandRunner-0.4.5.tar.gz", "has_sig": false, "md5_digest": "fb93ee96121eab5c091bfce1cb36ed67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6244, "upload_time": "2016-05-13T10:17:09", "url": "https://files.pythonhosted.org/packages/78/7d/6ce7c425d90e5fa7b94277f8c1ee7eed232068ba6e7f1b8716594f746bac/commandRunner-0.4.5.tar.gz" } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "ef60e3e93ae9476ccb3c09ee2295d496", "sha256": "af6ed7a527500fe7eff4a9fb82010f005a2bb2fb2f1b81bb9337258daa657c40" }, "downloads": -1, "filename": "commandRunner-0.4.6.tar.gz", "has_sig": false, "md5_digest": "ef60e3e93ae9476ccb3c09ee2295d496", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6233, "upload_time": "2016-07-07T13:50:59", "url": "https://files.pythonhosted.org/packages/23/1a/a33f1ba27c302b655cf12c996fce60aa27b6c60d2b861b8fee42e83d747d/commandRunner-0.4.6.tar.gz" } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "d34d2fe66bd33bdd7b94e83cd38a7cfc", "sha256": "71f9d40dfa743e7449a303f2775333c93b8e968444a5fe839356018275ba7541" }, "downloads": -1, "filename": "commandRunner-0.4.7.tar.gz", "has_sig": false, "md5_digest": "d34d2fe66bd33bdd7b94e83cd38a7cfc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6232, "upload_time": "2016-07-07T14:01:07", "url": "https://files.pythonhosted.org/packages/bd/a9/3fc5b50d0b64b23e499beed19bab43371dc70c23d9c70d2a865277bb35c5/commandRunner-0.4.7.tar.gz" } ], "0.4.8": [ { "comment_text": "", "digests": { "md5": "a13226a40c277771e5801f874511d822", "sha256": "b181df824e030c648ab88bbecedbeb976469a754ffa4e984f80649600415e7ea" }, "downloads": -1, "filename": "commandRunner-0.4.8.tar.gz", "has_sig": false, "md5_digest": "a13226a40c277771e5801f874511d822", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6273, "upload_time": "2017-01-30T15:41:06", "url": "https://files.pythonhosted.org/packages/a9/7b/b21e9725df12b491fc22a88790fe478054ab8faee931976b8315586c8369/commandRunner-0.4.8.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "443895b5bb481ed110c7f2c51818484f", "sha256": "9f847d5974a73798931e5e318315b04acce5ad6e74e1a36571bcfead43a9f2b0" }, "downloads": -1, "filename": "commandRunner-0.5.0.tar.gz", "has_sig": false, "md5_digest": "443895b5bb481ed110c7f2c51818484f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6373, "upload_time": "2017-02-14T13:54:09", "url": "https://files.pythonhosted.org/packages/d7/40/191e27fd139621eb4fabfbb2197b53aa52da50b24cdc870da748c4d6f492/commandRunner-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "0041deb213e52eb55b8c68c8e839ba43", "sha256": "1e0da36a8bd97fea6801c8042b44277b054b323e65591cd9cef6d0da58302282" }, "downloads": -1, "filename": "commandRunner-0.5.1.tar.gz", "has_sig": false, "md5_digest": "0041deb213e52eb55b8c68c8e839ba43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6376, "upload_time": "2017-02-14T16:56:55", "url": "https://files.pythonhosted.org/packages/71/41/4360a747a64242c8bd3c724767ff2952fde4f249a9bb3f49f9b389655a17/commandRunner-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "418f870fd1726e2964e60c1c4984b123", "sha256": "bc7b7f67d2aec59421a1e7e9562d3e8e432657669a51d14af44735ed4002e217" }, "downloads": -1, "filename": "commandRunner-0.6.0.tar.gz", "has_sig": false, "md5_digest": "418f870fd1726e2964e60c1c4984b123", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6997, "upload_time": "2017-02-17T15:03:54", "url": "https://files.pythonhosted.org/packages/a8/a7/0d9065c0c36d6163f2d250f4c219747e85bfaad92195ebd8753cff1d5ce8/commandRunner-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "d608bb86c0e4b74d73fdb212df84d776", "sha256": "c168070c5cc87326c1fc746a0152cea233a9a0650bb838c0d32aaad786ab66cb" }, "downloads": -1, "filename": "commandRunner-0.7.0.tar.gz", "has_sig": false, "md5_digest": "d608bb86c0e4b74d73fdb212df84d776", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10934, "upload_time": "2017-03-08T15:54:01", "url": "https://files.pythonhosted.org/packages/d9/5b/52d2bcd30d9cc648b5a5b8ed7a7adb49544a797b91220e0a48bc94d59cd8/commandRunner-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "a75f3ecea5fb34e4b9c53da61ffda594", "sha256": "7fd252b773df915a73198f045d3f3f0cc0b080ba5873e32a488a7eeac909abfd" }, "downloads": -1, "filename": "commandRunner-0.8.0.tar.gz", "has_sig": false, "md5_digest": "a75f3ecea5fb34e4b9c53da61ffda594", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12243, "upload_time": "2017-03-09T13:54:57", "url": "https://files.pythonhosted.org/packages/f3/58/c5b24189949d2a1dc31c3f08657af29d6cd989dc7881a25b986c5a407576/commandRunner-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "ce780247fffe2a6031eb5686cb26293a", "sha256": "415f416f3ae31a9da479396ab0b1cb8adff65d0a7afff4238653d7800038fd62" }, "downloads": -1, "filename": "commandRunner-0.8.1.tar.gz", "has_sig": false, "md5_digest": "ce780247fffe2a6031eb5686cb26293a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12378, "upload_time": "2017-03-09T16:58:46", "url": "https://files.pythonhosted.org/packages/39/5f/9ad7627187cd4acc033c1a3284892648fba65aae0b79fa6a966e205a9ea2/commandRunner-0.8.1.tar.gz" } ], "0.8.10": [ { "comment_text": "", "digests": { "md5": "4f7cd3ed10daed66aa5bbcc49b1d36e7", "sha256": "e2783c4946a077439805ea6f9336e4da95748f0b4b81365e7567fb76019796cd" }, "downloads": -1, "filename": "commandRunner-0.8.10.tar.gz", "has_sig": false, "md5_digest": "4f7cd3ed10daed66aa5bbcc49b1d36e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12806, "upload_time": "2018-06-13T16:56:38", "url": "https://files.pythonhosted.org/packages/9c/d6/5524218d92bda3bcda07c101873da74432799fa3a1c6c401c75273c30567/commandRunner-0.8.10.tar.gz" } ], "0.8.11": [ { "comment_text": "", "digests": { "md5": "e09da206c8190de6f6a876282c6b8775", "sha256": "d77a0c0e4e5360544023db178ec22da1d26f8cb8ce68d8be00712d95a6508217" }, "downloads": -1, "filename": "commandRunner-0.8.11.tar.gz", "has_sig": false, "md5_digest": "e09da206c8190de6f6a876282c6b8775", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12765, "upload_time": "2019-02-06T16:15:26", "url": "https://files.pythonhosted.org/packages/e4/66/1dcfca7f799192269267f1ab4c62969f860dab4d268350bad0fd02fc67ee/commandRunner-0.8.11.tar.gz" } ], "0.8.12": [ { "comment_text": "", "digests": { "md5": "4b7d579a1f4cdcd8233f8485d5f847b5", "sha256": "681c5d3b77580ecca2d3d4620d052c2dc5c1a0cfbbcc4c12adeed44599b67e61" }, "downloads": -1, "filename": "commandRunner-0.8.12.tar.gz", "has_sig": false, "md5_digest": "4b7d579a1f4cdcd8233f8485d5f847b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12783, "upload_time": "2019-06-28T13:05:36", "url": "https://files.pythonhosted.org/packages/c5/00/ed9b710c14f0737f8c97104cf143c17eb14eb8a983d355fff9527d786faf/commandRunner-0.8.12.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "4e3ca2367046146a4328619cc199bda3", "sha256": "9bb8d4481089fd7436d1cda5c30d885a945de6fc37633e62b9d68e040d471d54" }, "downloads": -1, "filename": "commandRunner-0.8.2.tar.gz", "has_sig": false, "md5_digest": "4e3ca2367046146a4328619cc199bda3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12396, "upload_time": "2017-03-10T14:28:39", "url": "https://files.pythonhosted.org/packages/24/05/2dc92767835a07104461f06566dccafdd4e04c51897ac979554e8dda5af9/commandRunner-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "ba8c9bde8e334da1655a3ac7de67e01a", "sha256": "9a640d0746841ddf1b8edcd16e1156a0e934ca194be91dee3148dae458a7dbc8" }, "downloads": -1, "filename": "commandRunner-0.8.3.tar.gz", "has_sig": false, "md5_digest": "ba8c9bde8e334da1655a3ac7de67e01a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12401, "upload_time": "2017-03-10T15:02:28", "url": "https://files.pythonhosted.org/packages/ce/f9/dde9a2246745bdcb1191b097ca6327e2a02d1c24039ad777dc11cbfbb42b/commandRunner-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "a6a60095f6d771f1697c7ecca13b4320", "sha256": "9909ac5e8b51e374ef5d5c3e0b79d002e3388c07baad66a546ff3488eaad7d11" }, "downloads": -1, "filename": "commandRunner-0.8.4.tar.gz", "has_sig": false, "md5_digest": "a6a60095f6d771f1697c7ecca13b4320", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12520, "upload_time": "2017-03-10T16:00:20", "url": "https://files.pythonhosted.org/packages/da/43/67c182168663310687bf9fc7219e0ccd11d5483d69db75192d37d3faddbe/commandRunner-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "3159a685f25a08ac5efdb734ee7425b8", "sha256": "7f241208d044e6a94dd2f8f9241030d34dc5673e8ea3a559d9bf02ba839f9679" }, "downloads": -1, "filename": "commandRunner-0.8.5.tar.gz", "has_sig": false, "md5_digest": "3159a685f25a08ac5efdb734ee7425b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12775, "upload_time": "2017-07-19T10:40:19", "url": "https://files.pythonhosted.org/packages/a7/bb/d89a66bf0cfa2b6ebf2e5a30fdd3ab8f535f55cd47575f04c902ddeb4797/commandRunner-0.8.5.tar.gz" } ], "0.8.6": [ { "comment_text": "", "digests": { "md5": "3e143d73da08bf770b562f50c12cfffa", "sha256": "e89450755887cde62c00c24beebf0d9ae8c9a0b779f59176f41d27514ee0f010" }, "downloads": -1, "filename": "commandRunner-0.8.6.tar.gz", "has_sig": false, "md5_digest": "3e143d73da08bf770b562f50c12cfffa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12766, "upload_time": "2017-07-19T11:04:49", "url": "https://files.pythonhosted.org/packages/31/8a/659c3b7a568220bda8fb211257293b2885a4b1f9e49194be7d0351fee83c/commandRunner-0.8.6.tar.gz" } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "b56209c9a26424e97cbbb01249f236d9", "sha256": "3df3916822ca61513df1965e82a21322217eb7db8d37e9fb6d5bee743404309c" }, "downloads": -1, "filename": "commandRunner-0.8.7.tar.gz", "has_sig": false, "md5_digest": "b56209c9a26424e97cbbb01249f236d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12754, "upload_time": "2018-02-08T15:54:45", "url": "https://files.pythonhosted.org/packages/d1/08/9e6a841f636f9b50759833d419d97dffc4ffbccd710fc666f0e17966758d/commandRunner-0.8.7.tar.gz" } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "3cdc6dda21ee6af056f3ecc587023b7d", "sha256": "807987013125d611e72880a48bcb8c71f7fd55cc5b4c0e0bed732204d804c817" }, "downloads": -1, "filename": "commandRunner-0.8.8.tar.gz", "has_sig": false, "md5_digest": "3cdc6dda21ee6af056f3ecc587023b7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12794, "upload_time": "2018-06-13T16:23:45", "url": "https://files.pythonhosted.org/packages/26/f0/d3ca427390a0ea121f733e667bfd8db08fa8085f3a908d6187372f1c1137/commandRunner-0.8.8.tar.gz" } ], "0.8.9": [ { "comment_text": "", "digests": { "md5": "8db5819123a2c25cd3c10b30a5df3781", "sha256": "f9ee240504738c361527d44d376d65623779cc3f58599baf079616c97193cb02" }, "downloads": -1, "filename": "commandRunner-0.8.9.tar.gz", "has_sig": false, "md5_digest": "8db5819123a2c25cd3c10b30a5df3781", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12788, "upload_time": "2018-06-13T16:31:07", "url": "https://files.pythonhosted.org/packages/28/de/1a0b507ba39acd1268541d2fc4fd6a8c10889e44bc2a99d789273fe54302/commandRunner-0.8.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4b7d579a1f4cdcd8233f8485d5f847b5", "sha256": "681c5d3b77580ecca2d3d4620d052c2dc5c1a0cfbbcc4c12adeed44599b67e61" }, "downloads": -1, "filename": "commandRunner-0.8.12.tar.gz", "has_sig": false, "md5_digest": "4b7d579a1f4cdcd8233f8485d5f847b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12783, "upload_time": "2019-06-28T13:05:36", "url": "https://files.pythonhosted.org/packages/c5/00/ed9b710c14f0737f8c97104cf143c17eb14eb8a983d355fff9527d786faf/commandRunner-0.8.12.tar.gz" } ] }