{ "info": { "author": "Aaron Graubert - Broad Institute - Cancer Genome Computational Analysis", "author_email": "aarong@broadinstitute.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator" ], "description": "# Canine\n\nA Dalmatian-based job manager to schedule tasks using SLURM\n\n---\n\n## Usage\n\nCanine operates by running jobs on a SLURM cluster. It is designed to take a bash\nor WDL script and schedule jobs using data from a Firecloud workspace or with manually\nprovided inputs. API usage documented at the bottom of this section.\n\nCanine may be used in any of the following ways:\n* Running a pipeline yaml file (ie: `$ canine examples/example_pipeline.yaml`)\n* Running a pipeline defined on the commandline (ie: `$ canine --backend type:TransientGCP --backend name:my-cluster (etc...)`)\n* Building and running a pipeline in python (ie: `>>> canine.Orchestrator(pipeline_dict).run_pipeline()`)\n* Using the [Canine API](https://broadinstitute.github.io/canine/) to execute custom\nworkflows in Slurm, which could not be configured as a pipeline object\n\n### Configuration\n\nCanine uses a YAML file to specify the job configuration.\nSee `pipeline_options.md` for a detailed description of pipeline configuration\n\n```yaml\nname: (str, optional) The name for this job {--name}\nscript: (str) The script to run {--script}\ninputs: # Inputs to the script\n varname: value {--input varname:value}\n varname: # {--input varname:value1 --input varname:value2}\n - value1\n - value2\nresources: # slurm resources\n varname: value {--resources varname:value}\nadapter: # Job input adapter configuration\n type: [One of: Manual (default), Firecloud] The adapter to map inputs into actual job inputs {--adapter type:value}\n # Other Keyword arguments to provide to adapter\n # Manual Args:\n product: (bool, default false) Whether adapter should take the product of all inputs rather than iterating {--adapter product:value}\n # FireCloud Args:\n workspace: (namespace)/(workspace) {--adapter workspace:ws/ns}\n entityType: [One of: sample, pair, participant, *_set] The entity type to use {--adapter entityType:type}\n entityName: (str) The entity to use {--adapter entityName:name}\n entityExpression: (str, optional) The expression to map the input entity to multiple sub-entities {--adapter entityExpression:expr}\n write_to_workspace: (bool, default True) If outputs should be written back to the workspace {--adapter write-to-workspace:value}\nbackend: # SLURM backend configuration\n type: [One of: Local (default), Remote, TransientGCP] The backend to use when interfacing with SLURM {--backend type:value}\n # Other keyword arguments to provide to the backend for initialization\n argname: argvalue {--backend argname:argvalue}\nlocalization: # Localization options\n common: (bool, default True) Files (gs:// or otherwise) which are shared by multiple tasks will be downloaded only once {--localization common:value}\n staging_dir: (str, default tempdir) Directory in which files for this job should be staged. For Remote backends, this should be set within the NFS share. If no NFS share exists, set this to \"SBCAST\" {--localization staging-dir:path}\n mount_path: (str, default null) Path within compute nodes where the staging dir can be found {--localization mount-path:path}\n strategy: [One of: Batched, Local, Remote] Strategy for staging inputs {--localization strategy:mode}\n transfer_bucket: (str, default null) Transfer directories via the given bucket instead of directly over SFTP. Bucket transfer generally faster\n overrides: # Override localization handling for specific inputs\n varname: [One of: Stream, Localize, Common, Delayed, null] Localization handling {--localization overrides:varname:mode}\n # Stream: The input variable will be streamed to a FIFO pipe which is passed to the job\n # Localize: The input variable will be downloaded for the job. If it's a local path, it will be copied to the job's staging directory\n # Common: The input variable will be downloaded to the common directory. If it's a local path, it will be copied to the common directory\n # If the input variable resolves to multiple values during the setup phase, each unique value will be copied to the common directory\n # Delayed: Same as Localize, except the file is downloaded during job setup, on the compute node. Delayed handling is ignored for local filepaths\n # null: The input variable will be treated as a regular string and no localization will take place\noutputs: # Required output files\n outputName: pattern {--output outputName:pattern}\n```\n\nCanine is designed to support a large variety of Slurm setups, including creating\na temporary Slurm cluster exclusively for itself. The options supported in pipelines\nshould allow users to run Slurm jobs in most common setups. For more complicated\nworkflows, you may need to use Canine's [Python API](https://broadinstitute.github.io/canine/)\nto gain more granular control.\n\n---\n\n# Overview\n\n* The user's chosen adapter maps script and raw inputs to actual task inputs\n* The Localizer uses the chosen transport backend to stage inputs on the SLURM controller\n* The adapter then uses the chosen SLURM backend to dispatch jobs\n* After jobs complete, Localizer identifies outputs and moves them out of the staging directory into the output directory\n* If using the Firecloud adapter, outputs are then written back to Firecloud\n\n## Job Environment Variables\n\nIn addition to all variables present during [SLURM batch jobs](https://slurm.schedmd.com/sbatch.html#lbAI)\nand all variables provided based on config inputs, Canine also exports the following\nvariables to all jobs:\n* `CANINE`: The current canine version\n* `CANINE_BACKEND`: The name of the current backend type\n* `CANINE_ADAPTER`: The name of the current adapter type\n* `CANINE_ROOT`: The path to the staging directory\n* `CANINE_COMMON`: The path to the directory where common files are localized\n* `CANINE_OUTPUT`: The path to the directory where job outputs will be staged during delocalization\n* `CANINE_JOBS`: The path to the directory which contains subdirectories for each job's inputs and workspace\n* `CANINE_JOB_VARS`: A colon separated list of the names of all variables generated by job inputs\n* `CANINE_JOB_INPUTS`: The path to the directory where job inputs are localized\n* `CANINE_JOB_ROOT`: The path to the working directory for the job. Equal to CWD at the start of the job. Output files should be written here\n* `CANINE_JOB_SETUP`: The path to the setup script which ran during job start\n* `CANINE_JOB_TEARDOWN`: The path the the teardown script which will run after the job\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/broadinstitute/canine", "keywords": "", "license": "BSD3", "maintainer": "", "maintainer_email": "", "name": "canine", "package_url": "https://pypi.org/project/canine/", "platform": "", "project_url": "https://pypi.org/project/canine/", "project_urls": { "Homepage": "https://github.com/broadinstitute/canine" }, "release_url": "https://pypi.org/project/canine/0.5.0/", "requires_dist": [ "paramiko (>=2.5.0)", "pandas (>=0.24.1)", "google-auth (>=1.6.3)", "PyYAML (>=5.1)", "agutil (>=4.1.0)", "hound (>=0.2.0)", "firecloud-dalmatian (>=0.0.17)", "google-api-python-client (>=1.7.11)" ], "requires_python": "", "summary": "A dalmatian-based job manager to schedule tasks using SLURM", "version": "0.5.0" }, "last_serial": 5940753, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "9eea5403308ef27965aaae281620ca84", "sha256": "6f3061a71d35b2b8b98752d0cee0bdc372370927edcbca96bdf249f9717b0ee2" }, "downloads": -1, "filename": "canine-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9eea5403308ef27965aaae281620ca84", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2390, "upload_time": "2019-05-21T18:36:48", "url": "https://files.pythonhosted.org/packages/84/8a/90f0880c4170396e915d192f9d89d431cbc0072633c688178ae1d6b0a457/canine-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c22fd5194ea85163d8fd90623d32ae7e", "sha256": "ef4e6121ab590123a4923965412d73231803f238f3fce8fb2f60422a0ee18f90" }, "downloads": -1, "filename": "canine-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c22fd5194ea85163d8fd90623d32ae7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1100, "upload_time": "2019-05-21T18:36:50", "url": "https://files.pythonhosted.org/packages/c7/a7/4413181668004adc9a411dce97897810884d53f5b2079f53d99c1b2992d8/canine-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "e0c67770abd3753aa59786d1fd1a8e28", "sha256": "149fdcb85bd6cd090c503b8e8f018ed1459f09298da0a0213d8d4514fdf6fb25" }, "downloads": -1, "filename": "canine-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e0c67770abd3753aa59786d1fd1a8e28", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 77941, "upload_time": "2019-07-08T20:21:55", "url": "https://files.pythonhosted.org/packages/f1/7f/e74e768b2484dc94499b332d87b7777fcdc059ea3e8970317461a09f0e0c/canine-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77f06edde9e849c0a4f1159cf066bcbe", "sha256": "10393a70d2972835da5016cb025983e067ff5bf362f88ff0dff54a052d2c9ca7" }, "downloads": -1, "filename": "canine-0.0.2.tar.gz", "has_sig": false, "md5_digest": "77f06edde9e849c0a4f1159cf066bcbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62222, "upload_time": "2019-07-08T20:21:56", "url": "https://files.pythonhosted.org/packages/60/9b/ded3dfaaf1436907cd6725567264058cc266997511ca8880ded59b2d361f/canine-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "43d9fbfda7439f8c5d75a93ffddcf1da", "sha256": "7c7540bbacd807b3c7dd48e8cd7a2e6a7e6550ce937fc13013e8fddfb43eae24" }, "downloads": -1, "filename": "canine-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "43d9fbfda7439f8c5d75a93ffddcf1da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78174, "upload_time": "2019-07-09T20:26:18", "url": "https://files.pythonhosted.org/packages/a8/64/d940183fda372b420df7880f76e06fd9ab45b9b7ab64d09ee35338bf09b7/canine-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "940e4b83acc63b54dcebb26b79b85003", "sha256": "3de7730a4085ed41f386bf1545fa610b71e04a07fede9b138fefbe166d3ceb95" }, "downloads": -1, "filename": "canine-0.1.0.tar.gz", "has_sig": false, "md5_digest": "940e4b83acc63b54dcebb26b79b85003", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62082, "upload_time": "2019-07-09T20:26:19", "url": "https://files.pythonhosted.org/packages/ce/ac/9fa19389d08ca0a7a5b1aded0b4541592de3219db2b1a594b0d9432adfb3/canine-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d5970dff651eb4d03cacbc7c96dd2061", "sha256": "a62d7a7b2d83d5a43cc9a5e8686771ce9ee4a7b0dfe364146bf55dd1672cbea9" }, "downloads": -1, "filename": "canine-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d5970dff651eb4d03cacbc7c96dd2061", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78068, "upload_time": "2019-07-10T22:39:53", "url": "https://files.pythonhosted.org/packages/dd/b7/c51d084d79cab34a10a6d4833bfeb51bd737b650ee98848877c250e161d2/canine-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96e530ac8c6c8bb7960244d5586b8d89", "sha256": "cef63aa6f7c2f848010fc48bde3dde5dbc6c112ad674bebd5305f29168b50ceb" }, "downloads": -1, "filename": "canine-0.1.1.tar.gz", "has_sig": false, "md5_digest": "96e530ac8c6c8bb7960244d5586b8d89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63136, "upload_time": "2019-07-10T22:39:55", "url": "https://files.pythonhosted.org/packages/95/c3/ec1619b8714a734a2f2a1578144101cec30b63067a9618a25d34672668ec/canine-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c3aec399acc1ec239ee7ac7e5d051b4f", "sha256": "5e9e83899c5c850f25d40148ef629a41510983cc3fd9c75f05597a39d0e28cf2" }, "downloads": -1, "filename": "canine-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c3aec399acc1ec239ee7ac7e5d051b4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78253, "upload_time": "2019-07-11T15:32:06", "url": "https://files.pythonhosted.org/packages/a6/72/7f0ffe9e8ec953f7dd5b9b951f384e6eb9fa628cf9809d1d92f094039da1/canine-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "def49863e462fd11912d7d3863d1dd5a", "sha256": "841a90f22fb34d27275512b04b4164422183ceb453da602ad4807bc06c21205d" }, "downloads": -1, "filename": "canine-0.1.2.tar.gz", "has_sig": false, "md5_digest": "def49863e462fd11912d7d3863d1dd5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63336, "upload_time": "2019-07-11T15:32:08", "url": "https://files.pythonhosted.org/packages/de/d5/124b2cf454b5e3baef4ab08a344f98ac6448c86c8fe8f6c50b3021ca5a30/canine-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0e37be0841718179b2902cd670575208", "sha256": "b433929c3cb342b16d06781c5fbe47cc8800559afd42ae9c52ef491f409040da" }, "downloads": -1, "filename": "canine-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0e37be0841718179b2902cd670575208", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78261, "upload_time": "2019-07-11T15:35:34", "url": "https://files.pythonhosted.org/packages/84/ef/5995892d02ca6c488f435c608242cb53c705038653b33fd64b2111bf9ce5/canine-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7d7c92e09316d545fe188a610957e98", "sha256": "1091f3a590c0df3a4e1839088c13aa976c5e1e2a89336f09e9d0993822ea5560" }, "downloads": -1, "filename": "canine-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a7d7c92e09316d545fe188a610957e98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63328, "upload_time": "2019-07-11T15:35:36", "url": "https://files.pythonhosted.org/packages/f7/17/63dd4e1cefddec35c1d2b49f821eca2d18eb37c6679747712307d8eb028b/canine-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "82359f036ed14ae7cd61166ca5015725", "sha256": "86690508bf8fb314fe0a1da52a144e5d620bf2108f3b071e03e31820d07941d4" }, "downloads": -1, "filename": "canine-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "82359f036ed14ae7cd61166ca5015725", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78499, "upload_time": "2019-07-17T21:05:17", "url": "https://files.pythonhosted.org/packages/fc/77/d78fbfca66caecb559b539ecea2eff5c0a1fa02dda7c925a7112b9dc3e3d/canine-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd858d25fdac1bb38e18b26a5485c8a9", "sha256": "29b0616ae3be54374f534e3d1c65ce1d566b245e3bed2f6b44872eb3ec76a266" }, "downloads": -1, "filename": "canine-0.2.0.tar.gz", "has_sig": false, "md5_digest": "cd858d25fdac1bb38e18b26a5485c8a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63581, "upload_time": "2019-07-17T21:05:18", "url": "https://files.pythonhosted.org/packages/eb/29/43a39e99655eefc8fba64762a9c3578da5eee88c9ea528613c5262907465/canine-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "61d9e7938ab03bad1454fc9aba04be39", "sha256": "ae6ce158a5cba8334ab16391659ae342117ccda8944077a4d7b4da75f117a8f7" }, "downloads": -1, "filename": "canine-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "61d9e7938ab03bad1454fc9aba04be39", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78512, "upload_time": "2019-07-17T23:07:59", "url": "https://files.pythonhosted.org/packages/19/94/5c9984124bd97464d58f39d5d9ae04e3d4905aabc4dffd69b284a6534064/canine-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc3009e06df3adfef78d278ba44dda44", "sha256": "1fe63b1c197ef16b43119e76b6e0d6d3e72771063d58c9247cbfaca848d2d45c" }, "downloads": -1, "filename": "canine-0.2.1.tar.gz", "has_sig": false, "md5_digest": "bc3009e06df3adfef78d278ba44dda44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63650, "upload_time": "2019-07-17T23:08:01", "url": "https://files.pythonhosted.org/packages/a9/0f/224754ed6e2e208ec92317067c5b21728bccf406169ab311ddb14d82cd27/canine-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "740addac24eec055e552124ee0615a46", "sha256": "b2cfbc33995ef47a9b8dbe0e4f0ab29042b767686de365bd0d60773b9cabf04c" }, "downloads": -1, "filename": "canine-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "740addac24eec055e552124ee0615a46", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 79548, "upload_time": "2019-08-16T18:49:35", "url": "https://files.pythonhosted.org/packages/f5/54/60443b61eb5dcdd9d432f688417712154c6d89893f1400cc608b4aa60f12/canine-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ed0f0d36fc6234d27e28444a5d5e0e3", "sha256": "f745f3c23ed9f2a4d84366956028eb8d907c134391ccbf667abe023a2d86b7e5" }, "downloads": -1, "filename": "canine-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2ed0f0d36fc6234d27e28444a5d5e0e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64835, "upload_time": "2019-08-16T18:49:36", "url": "https://files.pythonhosted.org/packages/f2/6d/455abb6d445d2df2e5b24ad9cfeff103d9ea5f36996694e3d416bcf8ac5b/canine-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "cc6eb6c9f35818bf7cdde4bd6477a0de", "sha256": "c044165a4bd7e589f855dcc46e7d78d3c2fa490ee4e38696c19b8271d28a8ac5" }, "downloads": -1, "filename": "canine-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cc6eb6c9f35818bf7cdde4bd6477a0de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 79546, "upload_time": "2019-08-19T21:58:16", "url": "https://files.pythonhosted.org/packages/4f/da/1379fbc7783219331cca1188b5b9a84b11f7040823d74814814c9d9bf0a5/canine-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31263c1a64380cb02bdffc05ce389412", "sha256": "e0b6c43526fe8a7f20409d0042f98ab995eac1d602ba29cfdd8bef71f097493c" }, "downloads": -1, "filename": "canine-0.3.1.tar.gz", "has_sig": false, "md5_digest": "31263c1a64380cb02bdffc05ce389412", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64826, "upload_time": "2019-08-19T21:58:18", "url": "https://files.pythonhosted.org/packages/93/a0/dd82ec752420f67f98fc21779468fae980245ce19475a6c7f7f351406557/canine-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "b2ec46ef8015be2dcac0bae4049806a3", "sha256": "705d0fb6e48999b729c4f6957dd4fd70c3279f5423769deb33bc30ffeae74cbe" }, "downloads": -1, "filename": "canine-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b2ec46ef8015be2dcac0bae4049806a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 79987, "upload_time": "2019-08-27T15:59:16", "url": "https://files.pythonhosted.org/packages/97/4d/f4ef8bcab76f84de4dc0cbc3e6dd98c229698ef8742624962c9a94d689a0/canine-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9773181d6fb80576d9d996ecc9238cc", "sha256": "3b306da4774b0e96634be65fdd8c168af8e9ebe14c75c124344e3a265ec69397" }, "downloads": -1, "filename": "canine-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f9773181d6fb80576d9d996ecc9238cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64978, "upload_time": "2019-08-27T15:59:17", "url": "https://files.pythonhosted.org/packages/b6/8a/b23219f98f4f78ea21a0f2e985f1d4d93fa27562d868410fc4380c863531/canine-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "59db4d79e592336410c7b60ef1823780", "sha256": "b7538d400e6d1d00c08b2664706a8e6680e50a8a3c63a160dbbc8f23bed5bf86" }, "downloads": -1, "filename": "canine-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "59db4d79e592336410c7b60ef1823780", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 88842, "upload_time": "2019-09-04T20:26:19", "url": "https://files.pythonhosted.org/packages/cb/b7/80106e39791c77572c64ecb27402ce6f30c22a942c836b71e7e2779fdc02/canine-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8e6198f9532f06f13d8563965dfabd5", "sha256": "4708777cb84220458ef7dbf7487e01036c1dd7c0fa61269305c4b11cd2c627bc" }, "downloads": -1, "filename": "canine-0.4.0.tar.gz", "has_sig": false, "md5_digest": "a8e6198f9532f06f13d8563965dfabd5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71555, "upload_time": "2019-09-04T20:26:20", "url": "https://files.pythonhosted.org/packages/52/1b/d9dcbfc6851611240dc0a6bc31204cffc38fe5abc1efea26965c3075c4a8/canine-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "c9f620a4dc14c53eae505e7ca60f01b7", "sha256": "4ec8a7686479685d2265a4cd068e902b5f02b51c44d4774ee67004fd66703b38" }, "downloads": -1, "filename": "canine-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c9f620a4dc14c53eae505e7ca60f01b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 88871, "upload_time": "2019-09-09T17:47:59", "url": "https://files.pythonhosted.org/packages/c0/9b/c7db7db0c3b41fad50197e0948eda34c13c057d86b39d90fecf1b83746cb/canine-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14025f62055e0958e30cc2ddee26097f", "sha256": "72d15a643b50b9055ccc90a4d831242653243cea17f98b302ba12978230cbac2" }, "downloads": -1, "filename": "canine-0.4.1.tar.gz", "has_sig": false, "md5_digest": "14025f62055e0958e30cc2ddee26097f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71621, "upload_time": "2019-09-09T17:48:01", "url": "https://files.pythonhosted.org/packages/ec/8a/cfcec819d238bb9bdcca22988602a7bb0270cfd9a418affed85db1ad8c4c/canine-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "195034b1bdeaeab34398a6498800f52c", "sha256": "53760da6190b2a424de4c662042c73bb4c6191d82f6c483fccd4a1187529a9db" }, "downloads": -1, "filename": "canine-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "195034b1bdeaeab34398a6498800f52c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 91605, "upload_time": "2019-10-07T18:47:30", "url": "https://files.pythonhosted.org/packages/f3/9e/64aa5ae9be55a46c01502a9b38c9f5a548a2afdfd18faaea471020b4fc4d/canine-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4114ce174e21bf966da8a549231a474a", "sha256": "e6fa2ae8a2ba08c49dac27bc82197303b2c6c34887393c7252f5ca1925d8f85f" }, "downloads": -1, "filename": "canine-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4114ce174e21bf966da8a549231a474a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73628, "upload_time": "2019-10-07T18:47:33", "url": "https://files.pythonhosted.org/packages/0d/46/2b86de79d3e8f3f29961fe6f5cda00257fe204413b003da2cb9933d15042/canine-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "195034b1bdeaeab34398a6498800f52c", "sha256": "53760da6190b2a424de4c662042c73bb4c6191d82f6c483fccd4a1187529a9db" }, "downloads": -1, "filename": "canine-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "195034b1bdeaeab34398a6498800f52c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 91605, "upload_time": "2019-10-07T18:47:30", "url": "https://files.pythonhosted.org/packages/f3/9e/64aa5ae9be55a46c01502a9b38c9f5a548a2afdfd18faaea471020b4fc4d/canine-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4114ce174e21bf966da8a549231a474a", "sha256": "e6fa2ae8a2ba08c49dac27bc82197303b2c6c34887393c7252f5ca1925d8f85f" }, "downloads": -1, "filename": "canine-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4114ce174e21bf966da8a549231a474a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73628, "upload_time": "2019-10-07T18:47:33", "url": "https://files.pythonhosted.org/packages/0d/46/2b86de79d3e8f3f29961fe6f5cda00257fe204413b003da2cb9933d15042/canine-0.5.0.tar.gz" } ] }