{ "info": { "author": "Kristy Horan", "author_email": "kristyhoran15@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Bio-Informatics" ], "description": "[![CircleCI](https://circleci.com/gh/MDU-PHL/bohra.svg?style=svg&circle-token=530799cb0764519fc65966ab48bac7e0d02f3688)](https://circleci.com/gh/MDU-PHL/bohra)\n[![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/)\n\n![Image](https://github.com/kristyhoran/bohra/blob/master/bohra.png)\n\n# Bohra \n\nBohra is microbial genomics pipeline, designed predominantly for use in public health, but may also be useful in research settings. The pipeline takes as input a tab-delimited file with the isolate IDs followed by the path to READ1 and READ2, a reference for alignment and a unique identifier, where reads are illumina paired end reads (other platforms are not supported).\n\n### Motivation\n\nBohra was inspired by Nullarbor (https://github.com/tseemann/nullarbor) to be used in public health microbiology labs for analysis of short reads from microbiological samples. The pipeline is written in [Snakemake](https://snakemake.readthedocs.io/en/stable/). \n\n### Etymology\n\nBohra the name of an exinct species of tree kangaroo that lived on the nullarbor. The name was chosen to reflect the fact that it will be predominantly used to build *trees*, relies on *snippy* (named for a very famous kangaroo) and was inspired by *nullarbor*. \n\n\n## Pipeline\n\nBohra takes raw sequencing reads and produces a standalone html file for simple distribution of reports.\n![Image](https://github.com/MDU-PHL/bohra/blob/master/workflow.png)\n\nBohra can be run in three modes\n1. SNPs and Phylogeny\n* Clean reads\n* Call variants\n* Generate a phylogenetic tree\n\n2. SNPs, Phylogeny, Typing, Annotation and Species Identification (DEFAULT)\n* Clean reads\n* Call variants\n* Generate a phylogenetic tree\n* Assemble\n* Species identification\n* MLST\n* Resistome\n* Annotate\n\n3. SNPs, Phylogeny, PanGenome and Typing and Species Identification\n* Clean reads\n* Call variants\n* Generate a phylogenetic tree\n* Assemble\n* Species identification\n* MLST\n* Resistome\n* Annotate\n* Pan Genome\n\n### Installation\n\nBohra requires >=python3.7\n\n#### Conda (Recomended)\n\nInstalling bohra with conda will ensure that all dependencies are present. See below for instructions on how to configure the databases for kraken2.\n\nSet up conda - documentation for conda installation can be found [here](https://conda.io/en/latest/miniconda.html)\n```\nconda config --add channels defaults\nconda config --add channels bioconda\nconda config --add channels conda-forge\n```\nIt is recomended that you set up a `bohra` environment\n```\nconda create -n bohra\n```\nTo use bohra\n```\nconda activate \n```\n#### PyPi\nIf installing with `pip` you will need to ensure other dependencies are also installed.\n```\npip3 install bohra\n```\n\n* [Snippy](https://github.com/tseemann/snippy)\n* [Shovill (skesa and spades.py)](https://github.com/tseemann/shovill)\n* [Roary](https://sanger-pathogens.github.io/Roary/)\n* [Prokka](https://github.com/tseemann/prokka)\n* [kraken2](https://ccb.jhu.edu/software/kraken/)\n* [abricate](https://github.com/tseemann/abricate)\n* [mlst](https://github.com/tseemann/mlst)\n* [iqtree](http://www.iqtree.org/)\n* [seqtk](https://github.com/lh3/seqtk)\n* [snp-dists](https://github.com/tseemann/snp-dists)\n\n\n\n*IMPORTANT*\nIn addition to installing kraken ensure that you have a kraken2 database. Minikraken can obtained as follows\n```\nwget ftp://ftp.ccb.jhu.edu/pub/data/kraken2_dbs/minikraken2_v2_8GB_201904_UPDATE.tgz\ntar -C $HOME -zxvf minikraken2_v2_8GB_201904_UPDATE.tgz\n```\nThis will download and unzip the kraken2 DB. Other kraken2 DB are also available, you can find more information [here](https://ccb.jhu.edu/software/kraken2/index.shtml?t=downloads)\n\nOnce you have the DB downloaded you will have to create an environment variable called `KRAKEN2_DEFAULT_DB`. This can be done by adding the following to your `$HOME/.bashrc`\n```\nexport KRAKEN_DEFAULT_DB=$HOME/minikraken2_v2_8GB_201904_UPDATE\n```\n\nBohra can be run in two modes `run` for an initial analysis and `rerun` for a re-analysis. A `.html` report is generated allowing for the visualisation of tree and examination of the dataset to provide insights that may be useful in interpretation of the results.\n\n### Set up\n\n**Input file**\n\nThe input file needs to be a tab-delimited file with three columns IsolateID, path to R1 and path to R2. \n```\nIsolate-ID /path/to/reads/R1.fq.gz /path/to/reads/R2.fq.gz\n```\n\n**Reference**\n\nThe choice of reference is important for the accuracy of SNP detection and therefore the investigation of genomic relatedness. Appropriate references should be chosen following the guidelines below.\n1. A closed reference from the same ST (where applicable) or a gold-standard reference (as may be used in M. tuberculosis).\n2. A pacbio or nanopore assembly from MDU that is of the same type as the query dataset\n3. A high quality de novo assembly of either an isolate in the dataset or an isolate of the same ST or type.\n\n**Mask**\n\nPhage masking is important for to prevent the inflation of SNPs that can be introduced by horizontal transfer as opposed to vertical transfer. For closed genomes or those that are publicly available `phaster-query.pl` can be used to identify regions for masking. If a denovo assembly is used the website `phaster.ca` can be used. Regions for masking should be provided in `.bed` format.\n\n\n\n### Run\n\n**Minimal command**\n\n`bohra run -r path/to/reference -i path/to/inputfile -j unique_id -m path/to/maskfile (optional)`\n\n```bohra run -h\nusage: bohra run [-h] [--input_file INPUT_FILE] [--job_id JOB_ID]\n [--reference REFERENCE] [--mask MASK]\n [--pipeline {sa,s,a,all}]\n [--assembler {shovill,skesa,spades}] [--cpus CPUS]\n [--minaln MINALN] [--prefillpath PREFILLPATH] [--mdu MDU]\n [--workdir WORKDIR] [--resources RESOURCES] [--force]\n [--dryrun] [--gubbins]\n\noptional arguments:\n -h, --help show this help message and exit\n --input_file INPUT_FILE, -i INPUT_FILE\n Input file = tab-delimited with 3 columns\n \n (default: )\n --job_id JOB_ID, -j JOB_ID\n Job ID, will be the name of the output directory\n (default: )\n --reference REFERENCE, -r REFERENCE\n Path to reference (.gbk or .fa) (default: )\n --mask MASK, -m MASK Path to mask file if used (.bed) (default: False)\n --pipeline {sa,s,a,all}, -p {sa,s,a,all}\n The pipeline to run. SNPS ('s') will call SNPs and\n generate phylogeny, ASSEMBLIES ('a') will generate\n assemblies and perform mlst and species identification\n using kraken2, SNPs and ASSEMBLIES ('sa' - default)\n will perform SNPs and ASSEMBLIES. ALL ('all') will\n perform SNPS, ASSEMBLIES and ROARY for pan-genome\n analysis (default: sa)\n --assembler {shovill,skesa,spades}, -a {shovill,skesa,spades}\n Assembler to use. (default: shovill)\n --cpus CPUS, -c CPUS Number of CPU cores to run, will define how many rules\n are run at a time (default: 36)\n --minaln MINALN, -ma MINALN\n Minimum percent alignment (default: 0)\n --prefillpath PREFILLPATH, -pf PREFILLPATH\n Path to existing assemblies - in the form\n path_to_somewhere/isolatename/contigs.fa (default:\n None)\n --mdu MDU If running on MDU data (default: True)\n --workdir WORKDIR, -w WORKDIR\n Working directory, default is current directory\n (default: /home/khhor)\n --resources RESOURCES, -s RESOURCES\n Directory where templates are stored (default:\n /home/khhor/dev/bohra/bohra/templates)\n --force, -f Add if you would like to force a complete restart of\n the pipeline. All previous logs will be lost.\n (default: False)\n --dryrun, -n If you would like to see a dry run of commands to be\n executed. (default: False)\n --gubbins, -g If you would like to run gubbins. NOT IN USE YET -\n PLEASE DO NOT USE (default: False)\n --cluster, -clst If you are running Bohra on a cluster. Note if set you \n will need to provide a cluster.json file and a \n run_snakemake.sh, you can see examples on the \n documentation page.\n --json Path to cluster.json - required if --cluster is set\n --run-snake Path to run_snakemake.sh - required if --cluster is set\n```\n\n### Rerun\n\nA rerun may be performed if changes to the reference and/or mask file are needed. In addition, if isolates need to be removed or added to the analysis. \nThe following behaviour on a rerun should be expected;\n* New reference will result in calling of snps in all isolates of the analysis\n* If the reference is unchanged SNPs will only be called on new isolates\n* Determination of core alignment, distances and generation of trees will occur for every rerun\n\n`-r` and `-m` are only required if these are to be different to the previous run. If not Bohra will detect and use the previous reference and mask files. Also changes to the isolates included should be made to the input file used in the original run. New isolates can be added to the bottom of the input file and prefixing an isolate with `#` will remove it from the analysis.\n\n**Minimal command**\n\n`bohra rerun`\n\n```usage: bohra rerun [-h] [--reference REFERENCE] [--mask MASK] [--cpus CPUS]\n [--workdir WORKDIR] [--resources RESOURCES] [--dryrun]\n [--gubbins] [--keep]\n\noptional arguments:\n -h, --help show this help message and exit\n --reference REFERENCE, -r REFERENCE\n Path to reference (.gbk or .fa) (default: )\n --mask MASK, -m MASK Path to mask file if used (.bed) (default: )\n --cpus CPUS, -c CPUS Number of CPU cores to run, will define how many rules\n are run at a time (default: 36)\n --workdir WORKDIR, -w WORKDIR\n Working directory, default is current directory\n (default: /home/khhor)\n --resources RESOURCES, -s RESOURCES\n Directory where templates are stored (default:\n /home/khhor/dev/bohra/bohra/templates)\n --dryrun, -n If you would like to see a dry run of commands to be\n executed. (default: False)\n --gubbins, -g If you would like to run gubbins. NOT IN USE YET -\n PLEASE DO NOT USE (default: False)\n --keep, -k Keep report from previous run (default: False)\n --cluster, -clst If you are running Bohra on a cluster. Note if set you \n will need to provide a cluster.json file and a \n run_snakemake.sh, you can see examples on the \n documentation page.\n --json Path to cluster.json - if not included will default\n to version provided in previous run\n --queue The queueing system in use - qsub or sbatch\n ```\n\n### Running Bohra in a HPC environment\nBohra can be run in a HPC environment (currently only sbatch and qsub are supported). To do this some knowledge and experience in such environments is assumed. You will need to provide a file called `cluster.json`. This file will contain rule specifc and default settings for running the pipeline. An template is shown below (it is recommended that you use this template, settings have been established using a slurm queueing system), in addition you can see further documentation [here](https://snakemake.readthedocs.io/en/stable/snakefiles/configuration.html#cluster-configuration).\n\n*example command*\n```\nbohra run -r -i -j --cluster --json cluster.json --queue sbatch\n```\n\n```\nbohra rerun --cluster --queue sbatch\n```\n\n*cluster.json*\n```\n{\n \"__default__\" :\n {\n \"account\" : \"AccountName\",\n \"time\" : \"0-0:5:00\",\n \"cpus-per-task\": \"2\",\n \"partition\" : \"cloud\",\n \"mem\" : \"2G\",\n \"ntasks\" : \"4\",\n \"job\" : \"{rule}\"\n },\n \"snippy\" :\n {\n\n \"cpus-per-task\" : \"4\",\n \"time\" : \"0-0:5:00\",\n \"mem\" : \"8G\" \n },\n \"assemble\":\n {\n \"cpus-per-task\" : \"4\",\n \"time\" : \"0-0:20:00\",\n \"mem\" : \"32G\"\n\n },\n \"kraken\" :\n {\n \"cpus-per-task\" : \"8\",\n \"time\" : \"0-0:20:00\",\n \"mem\" : \"32G\"\n },\n \"run_iqtree_core\" :\n {\n \"time\": \"0-0:20:00\"\n },\n \"roary\" : \n {\n \"cpus-per-task\" : \"36\",\n \"time\" : \"0-0:25:00\",\n \"mem\": \"8G\"\n },\n \"run_prokka\" :\n {\n \"cpus-per-task\" : \"8\",\n \"time\" : \"0-0:10:00\"\n },\n \"run_snippy_core\" :\n {\n \"time\" : \"0-0:15:00\"\n }\n}\n```\n\n\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/joe/mycoolpkg", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "bohra", "package_url": "https://pypi.org/project/bohra/", "platform": "", "project_url": "https://pypi.org/project/bohra/", "project_urls": { "Homepage": "https://github.com/joe/mycoolpkg" }, "release_url": "https://pypi.org/project/bohra/1.0.26/", "requires_dist": [ "pytest", "jinja2", "biopython (>=1.70)", "pandas (>=0.23.0)", "numpy", "svgwrite", "psutil", "sh", "packaging", "snakemake (>=5.4.0)", "pytest ; extra == 'tests'", "flake8 ; extra == 'tests'" ], "requires_python": ">= 3.7", "summary": "A bioinformatics pipeline for analysing short read Illumina data microbiological public health.", "version": "1.0.26" }, "last_serial": 5883531, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "188e5051473527f524f40c22ec7aad8d", "sha256": "f07a9c96354e5d425dc87dfb4ab653e804399d11641760fadc3d4575e8ac205e" }, "downloads": -1, "filename": "bohra-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "188e5051473527f524f40c22ec7aad8d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 47582, "upload_time": "2019-07-25T08:17:32", "url": "https://files.pythonhosted.org/packages/f7/32/4c65b39340e18e5293e850129e20121744158e7d69b1f0b87696bd10bd94/bohra-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24300f8b62b0e80a0266c11b5c556670", "sha256": "d796a8b703d672a607d51f047f1cd3f8e1e56dbab73a0a780212ba1253bf4438" }, "downloads": -1, "filename": "bohra-1.0.1.tar.gz", "has_sig": false, "md5_digest": "24300f8b62b0e80a0266c11b5c556670", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 35089, "upload_time": "2019-07-25T08:17:35", "url": "https://files.pythonhosted.org/packages/43/ff/2b5d874feefd56775a5f779e9d34c4ee9e41db4b005a0a13267e6b4939b0/bohra-1.0.1.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "2f11e0b78ac4578d195c793523eb3333", "sha256": "33f3dddf539bfb4023879056f7663f424a057a8c2a252a850104262ac4b2db97" }, "downloads": -1, "filename": "bohra-1.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "2f11e0b78ac4578d195c793523eb3333", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53436, "upload_time": "2019-07-31T04:02:52", "url": "https://files.pythonhosted.org/packages/3a/3e/987d212efb917de7c00d1cd5e92509d65840e276babfc603a567546fea09/bohra-1.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eab6e452076b1aeb76d446cb86bad047", "sha256": "f7cd4238de4ce5d264f4527012ce80ca11966df5cbf32ac3e49263c473ae4e5e" }, "downloads": -1, "filename": "bohra-1.0.10.tar.gz", "has_sig": false, "md5_digest": "eab6e452076b1aeb76d446cb86bad047", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1979381, "upload_time": "2019-07-31T04:02:55", "url": "https://files.pythonhosted.org/packages/62/77/ee38126e6cba04a70a40364b1a3cca6035e5b0b1eebda43780ee003cfe3c/bohra-1.0.10.tar.gz" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "0ab6b42bcc322ff84f9e4d98d2267a20", "sha256": "8c0b306a70144eb05af5f69cdd2764821f25388f97d2d5261623fa7e22d3969b" }, "downloads": -1, "filename": "bohra-1.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "0ab6b42bcc322ff84f9e4d98d2267a20", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034128, "upload_time": "2019-07-31T05:37:19", "url": "https://files.pythonhosted.org/packages/54/42/734f96dea9b010611e7151c56a0b065da72029fabc5b7ade2907769c277d/bohra-1.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b55879895e9cff9c29a5afed745d2765", "sha256": "ee45c57c5b652d16653be19e658aaf4ede80b17dcea61a2ba585104d6bd34188" }, "downloads": -1, "filename": "bohra-1.0.11.tar.gz", "has_sig": false, "md5_digest": "b55879895e9cff9c29a5afed745d2765", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978657, "upload_time": "2019-07-31T05:37:22", "url": "https://files.pythonhosted.org/packages/01/8e/21194a8d4ba3df1af4b4dea70275645bae20b82a7654218c83b54650c691/bohra-1.0.11.tar.gz" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "83a1dd9e60cb36e3434c7d62de13d1aa", "sha256": "8b0c2ca0ceab5b925c9251f5b4e5bcbcb7607aa0506944d78d811536b2ce0664" }, "downloads": -1, "filename": "bohra-1.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "83a1dd9e60cb36e3434c7d62de13d1aa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53435, "upload_time": "2019-07-31T05:56:23", "url": "https://files.pythonhosted.org/packages/17/dc/aa05e72e1cb91b384139017c455f7dcb0ae30f63ab4b6373a60233404a54/bohra-1.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ed6337284ab72c1987a6c8a9c76a09c", "sha256": "551773df5793b1a3d160a53d9e7d1f9e96fafcc2fb2c1a9d0bef8a0072784e9c" }, "downloads": -1, "filename": "bohra-1.0.12.tar.gz", "has_sig": false, "md5_digest": "4ed6337284ab72c1987a6c8a9c76a09c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1979383, "upload_time": "2019-07-31T05:56:26", "url": "https://files.pythonhosted.org/packages/28/c1/70419dd75e1d1bcc881a4210d2bff7c835064f368ebedf7403557ebf4bf9/bohra-1.0.12.tar.gz" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "873c96220f424c037622bac1af36e48b", "sha256": "356583f6ac8963802703fd2554e17d4df0c1ff91432fcff236ee0a8219b9e7a1" }, "downloads": -1, "filename": "bohra-1.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "873c96220f424c037622bac1af36e48b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53434, "upload_time": "2019-07-31T06:31:12", "url": "https://files.pythonhosted.org/packages/1a/4d/6556088d19c9672bf57a1bca381467eff1a2ce75b113548909c0553c523c/bohra-1.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae1e426f97a2493ee41fcf46ae2ddb79", "sha256": "a08726f281b144cae0c51e97c3202067a2bb3665cbbec82d83c303cac48cff05" }, "downloads": -1, "filename": "bohra-1.0.13.tar.gz", "has_sig": false, "md5_digest": "ae1e426f97a2493ee41fcf46ae2ddb79", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1979384, "upload_time": "2019-07-31T06:31:16", "url": "https://files.pythonhosted.org/packages/c2/d7/3489bef38c80ac6b16a348bd974a79e48d4e2cac03d9c90ad8aae9d3803e/bohra-1.0.13.tar.gz" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "241d8e403a8458d96fb653ae6ee27ef3", "sha256": "e90362a4127dc1883bbae13b78d2ff2bc7e147eac95b88bad71665635433ee41" }, "downloads": -1, "filename": "bohra-1.0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "241d8e403a8458d96fb653ae6ee27ef3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034141, "upload_time": "2019-07-31T06:41:13", "url": "https://files.pythonhosted.org/packages/d1/11/bd98a37368246aa68b324c3b3d7abdb03448892c1e3e8e4405d8024b17ee/bohra-1.0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c87301d6cf7a185dc7dcb72a956de4af", "sha256": "144e7988a40e9deb504de6c1aeb1cd026cdce7ea58de09195ecade7b1aa26cf4" }, "downloads": -1, "filename": "bohra-1.0.15.tar.gz", "has_sig": false, "md5_digest": "c87301d6cf7a185dc7dcb72a956de4af", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978662, "upload_time": "2019-07-31T06:41:16", "url": "https://files.pythonhosted.org/packages/f8/02/b73dbad2e4456bc564b7c50e39ca9bcce1d2dc3518ce014df4400f2bc03e/bohra-1.0.15.tar.gz" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "61fd1e38e3ba05f5fe4cd6190cb3bc24", "sha256": "9af40121737715a72ec39d17a7b9d7a4144cc243948f1690c6c46e915d0e399c" }, "downloads": -1, "filename": "bohra-1.0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "61fd1e38e3ba05f5fe4cd6190cb3bc24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034145, "upload_time": "2019-07-31T06:53:04", "url": "https://files.pythonhosted.org/packages/b2/a2/2a64dedc5354a20eb509c4027756930dfccdac2028b7e5b760f33dbbe03b/bohra-1.0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09cec47cc1995e9f6a7040f8a128c304", "sha256": "6afa6ee898e0294b47e0bf4d871d49170dbc1646edb8d440c05ae61d3f779c1b" }, "downloads": -1, "filename": "bohra-1.0.16.tar.gz", "has_sig": false, "md5_digest": "09cec47cc1995e9f6a7040f8a128c304", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978676, "upload_time": "2019-07-31T06:53:07", "url": "https://files.pythonhosted.org/packages/7a/6a/10da9c0521ddcb833a7c055711b1dde17619fb627b907588607021929b2e/bohra-1.0.16.tar.gz" } ], "1.0.17": [ { "comment_text": "", "digests": { "md5": "0d9d21e2ef14caeab64a29f1d9fa6da6", "sha256": "434ae1098ce4ba2f37f0e556ef25b4d5b7a3f498ed37f555d2d44476f2299ccb" }, "downloads": -1, "filename": "bohra-1.0.17-py3-none-any.whl", "has_sig": false, "md5_digest": "0d9d21e2ef14caeab64a29f1d9fa6da6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034146, "upload_time": "2019-07-31T07:15:34", "url": "https://files.pythonhosted.org/packages/d1/ae/c07a0aa96fe977bdb482056474ed71cd53f1c160efcb74f25aaff804e0f7/bohra-1.0.17-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8bd141086813d9c7732e795341c9c05e", "sha256": "d49cfd25814249ded755fdf04bb1d99da7153ffb8768bcb8c88dbe9687d20dde" }, "downloads": -1, "filename": "bohra-1.0.17.tar.gz", "has_sig": false, "md5_digest": "8bd141086813d9c7732e795341c9c05e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978677, "upload_time": "2019-07-31T07:15:37", "url": "https://files.pythonhosted.org/packages/d0/10/ce484c1f3ad0a8dcf0ae5557cdf49d418298f792b79d3c55c1d11978e127/bohra-1.0.17.tar.gz" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "2f8bbc092242e6398996cb94f6999ec0", "sha256": "cb0edaa9b346640e1804e425bd71f5af43ca8f7787fcc562e25936ad2a5eabaf" }, "downloads": -1, "filename": "bohra-1.0.18-py3-none-any.whl", "has_sig": false, "md5_digest": "2f8bbc092242e6398996cb94f6999ec0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034147, "upload_time": "2019-08-01T00:10:31", "url": "https://files.pythonhosted.org/packages/12/d9/2d0a4b1aacb5faa006f53d0510b5be7f67cd908ba323eec5e81a8c9c4e4e/bohra-1.0.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08475d962c6f82e9067d6dd92458470b", "sha256": "e71ce83d3d3104770fffa5dfc0c64d1911f1b57c08475c8edb90a65a573dd95b" }, "downloads": -1, "filename": "bohra-1.0.18.tar.gz", "has_sig": false, "md5_digest": "08475d962c6f82e9067d6dd92458470b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978661, "upload_time": "2019-08-01T00:10:34", "url": "https://files.pythonhosted.org/packages/e8/de/13d60a16a920b14da11f45cc94ac2e29f90fcb324c358cc6e830fc849226/bohra-1.0.18.tar.gz" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "07e60daa51f237b08ec3dec675e4879e", "sha256": "ea0c642184157066d134bc49ef38f7fd6ebd317c4d0ed85f16a0c17771090cc4" }, "downloads": -1, "filename": "bohra-1.0.19-py3-none-any.whl", "has_sig": false, "md5_digest": "07e60daa51f237b08ec3dec675e4879e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2034139, "upload_time": "2019-08-01T19:34:47", "url": "https://files.pythonhosted.org/packages/f4/ce/672f6a52e9d620fe017536819be049e9853629f2f450f6b6ee381057f367/bohra-1.0.19-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51b643e75fe726624ff5641720abe431", "sha256": "f99205fbdad0a1822a0eb3ae72f55d76b1fcd9d03cbe60923b9d74849929e76b" }, "downloads": -1, "filename": "bohra-1.0.19.tar.gz", "has_sig": false, "md5_digest": "51b643e75fe726624ff5641720abe431", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1978655, "upload_time": "2019-08-01T19:34:51", "url": "https://files.pythonhosted.org/packages/62/38/981f5843768b8d41a8a4e603e369ef486b957237baa0f8080489a9b40883/bohra-1.0.19.tar.gz" } ], "1.0.20": [ { "comment_text": "", "digests": { "md5": "f7654feb969245bef8d2c32b683c5e0c", "sha256": "3a5617e031f7f151b4151c2e437abce082dd2df3b4c03b9ac7d165d6ec36ed67" }, "downloads": -1, "filename": "bohra-1.0.20-py3-none-any.whl", "has_sig": false, "md5_digest": "f7654feb969245bef8d2c32b683c5e0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 2035170, "upload_time": "2019-08-07T06:41:31", "url": "https://files.pythonhosted.org/packages/f8/48/36acd6d1bf3b020a9bef0a9277b8a3833ca412b9d651432cb45a5c6cf83a/bohra-1.0.20-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba868907e20ed1da2efeb1bd1ae6ed49", "sha256": "f589094a141e3fb8453c32cc3fe4ff5602f292dbb7e94ab08cb8b3e956f6d5af" }, "downloads": -1, "filename": "bohra-1.0.20.tar.gz", "has_sig": false, "md5_digest": "ba868907e20ed1da2efeb1bd1ae6ed49", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 1979969, "upload_time": "2019-08-07T06:41:34", "url": "https://files.pythonhosted.org/packages/a7/e9/6e3868ad803f30cbc82163bf6533a267f1fea26a9f7b9f124ccf51b7fa48/bohra-1.0.20.tar.gz" } ], "1.0.22": [ { "comment_text": "", "digests": { "md5": "864d0b1d9f556e4b4ac5bec21dfd734b", "sha256": "b5dc8371230143c5960adf12ca1a45c2b92914992e639c544446be53a5ce16d6" }, "downloads": -1, "filename": "bohra-1.0.22-py3-none-any.whl", "has_sig": false, "md5_digest": "864d0b1d9f556e4b4ac5bec21dfd734b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038175, "upload_time": "2019-09-21T08:12:46", "url": "https://files.pythonhosted.org/packages/05/a1/54333da72d72f56ff33b2fb8535fe734c6c77bbdc8ae2a7e4b88516b70c3/bohra-1.0.22-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fde09299b6557f50c0e7f881ab089478", "sha256": "87b0b1471b8f12e3b5ca69582afa26357290c5009530c8a70949814209fc4616" }, "downloads": -1, "filename": "bohra-1.0.22.tar.gz", "has_sig": false, "md5_digest": "fde09299b6557f50c0e7f881ab089478", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984061, "upload_time": "2019-09-21T08:12:49", "url": "https://files.pythonhosted.org/packages/0d/15/a968d931ba1d1e588b058a046a0875338a6fe9aba6accdb0daef24360de7/bohra-1.0.22.tar.gz" } ], "1.0.23": [ { "comment_text": "", "digests": { "md5": "7dcc7d6fc0fc595140fc8ca526133b3f", "sha256": "55269df31d5ae46ed56e7c4bfdccf51413909955dcd937934a6d982bbe517c98" }, "downloads": -1, "filename": "bohra-1.0.23-py3-none-any.whl", "has_sig": false, "md5_digest": "7dcc7d6fc0fc595140fc8ca526133b3f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038216, "upload_time": "2019-09-22T01:16:54", "url": "https://files.pythonhosted.org/packages/0c/55/079540f18f85ab6fa5cc3fe30cbbdadf988fcd1a0b2e37672595b1a0071d/bohra-1.0.23-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3da8f42e449cc439014a0655b7011fca", "sha256": "33ab2d8ed6e623c3847546ec0cbd07f177441a9aa329b98da1768dfda59ce25a" }, "downloads": -1, "filename": "bohra-1.0.23.tar.gz", "has_sig": false, "md5_digest": "3da8f42e449cc439014a0655b7011fca", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984188, "upload_time": "2019-09-22T01:16:58", "url": "https://files.pythonhosted.org/packages/d7/63/4b46314a753fb46dc79195cbcfd423a7852af3f938c2938271e7865ddb32/bohra-1.0.23.tar.gz" } ], "1.0.24": [ { "comment_text": "", "digests": { "md5": "a073da1605cf2af0204ebd727d253927", "sha256": "6d84f0a1647a1ce4c8379790c6caff032a1627e4636176ca04b972a0c2a4fb28" }, "downloads": -1, "filename": "bohra-1.0.24-py3-none-any.whl", "has_sig": false, "md5_digest": "a073da1605cf2af0204ebd727d253927", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038178, "upload_time": "2019-09-24T04:09:30", "url": "https://files.pythonhosted.org/packages/18/34/c8c7f282357395d3d483445413f42ea92e5608ef49c709a98c492a91cb1e/bohra-1.0.24-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e5666cffaecb3df88aaf12574fa7217", "sha256": "17c26ba34889f0026f4beab08ca1df2a849c0b26dc21c194792a1035d8d31aea" }, "downloads": -1, "filename": "bohra-1.0.24.tar.gz", "has_sig": false, "md5_digest": "0e5666cffaecb3df88aaf12574fa7217", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984143, "upload_time": "2019-09-24T04:09:35", "url": "https://files.pythonhosted.org/packages/2c/56/948261dfa1df432be5a2c63c26822b5870c09ac2402d533bb964aeb3567a/bohra-1.0.24.tar.gz" } ], "1.0.25": [ { "comment_text": "", "digests": { "md5": "b324ec1bce80630391ab6930aaebc9a2", "sha256": "6b1a7a780aca902a48cba71e95670655f63d265ea2ab6e3253929b23ad7f6490" }, "downloads": -1, "filename": "bohra-1.0.25-py3-none-any.whl", "has_sig": false, "md5_digest": "b324ec1bce80630391ab6930aaebc9a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038178, "upload_time": "2019-09-25T05:46:20", "url": "https://files.pythonhosted.org/packages/c1/ab/5fe88b10c4badb4ea4fb814b2b31965c5967ac3c322891ffb35602b1ddf5/bohra-1.0.25-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1c3c137056eb656679c4ded74df9a068", "sha256": "48ec2980549d2bacb1f21708979e969e105ba6e45b0af4b4343691436b553b9b" }, "downloads": -1, "filename": "bohra-1.0.25.tar.gz", "has_sig": false, "md5_digest": "1c3c137056eb656679c4ded74df9a068", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984138, "upload_time": "2019-09-25T05:46:24", "url": "https://files.pythonhosted.org/packages/34/f7/3fd8bebbaab2f88d0826a766b8cf859d2163180132b18bf8c7ba772777e3/bohra-1.0.25.tar.gz" } ], "1.0.26": [ { "comment_text": "", "digests": { "md5": "8df2dd9e48f5f905c290ff5477a3a5f8", "sha256": "2a137847284ab2f52cf8869fb2755e2f7e246ba820f6c18b2ec1d3836f8ce137" }, "downloads": -1, "filename": "bohra-1.0.26-py3-none-any.whl", "has_sig": false, "md5_digest": "8df2dd9e48f5f905c290ff5477a3a5f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038174, "upload_time": "2019-09-25T07:11:50", "url": "https://files.pythonhosted.org/packages/87/ef/91a21a07f8cfd6af7520840f628471772af0b328c7021903a2ebc10a00b4/bohra-1.0.26-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b88c8bb2c92c00190f3bd2880cce39d5", "sha256": "34d55a54bca5fff13e7a19f1e8ba3afe46ad7dde98dbeeaae234b81b38edf82d" }, "downloads": -1, "filename": "bohra-1.0.26.tar.gz", "has_sig": false, "md5_digest": "b88c8bb2c92c00190f3bd2880cce39d5", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984148, "upload_time": "2019-09-25T07:11:54", "url": "https://files.pythonhosted.org/packages/7c/c6/b28e8b6e8cfaa39264e6d0763eff754455a041c31c76c91119061d19299c/bohra-1.0.26.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "cf15e3d4a981ddf2c56184b929f07a0e", "sha256": "ee77626f69ac44b60baf5c97dea6a87692d87500fec59184a71c661b8d4d7387" }, "downloads": -1, "filename": "bohra-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "cf15e3d4a981ddf2c56184b929f07a0e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 50681, "upload_time": "2019-07-29T01:45:48", "url": "https://files.pythonhosted.org/packages/28/b1/5abfe3ee221c4c37163f5985e75865f7dff7602f34867adf6bb903f41b46/bohra-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b82fb9e2e6005140a8e026d6625c5f1", "sha256": "9b932df308da674b3e96f7b444aa7d796dc0fe3dfbab554208d14b537e4be886" }, "downloads": -1, "filename": "bohra-1.0.3.tar.gz", "has_sig": false, "md5_digest": "4b82fb9e2e6005140a8e026d6625c5f1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 37908, "upload_time": "2019-07-29T01:45:50", "url": "https://files.pythonhosted.org/packages/b3/66/dede781c3629224aa29004f710ae7414b0f12e123ed9e9eabc0209fc60c3/bohra-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "1f566f3a1b3f92140c3bdf76cbecd926", "sha256": "9d30d3cfd0e409e624e7a67c203ba764982d09f85b30fc226c4c198e9717f1cf" }, "downloads": -1, "filename": "bohra-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "1f566f3a1b3f92140c3bdf76cbecd926", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 51028, "upload_time": "2019-07-29T03:25:44", "url": "https://files.pythonhosted.org/packages/77/9d/c2b7a89e7fd7eccba4d19244c05db8865622a34e2d8808a580d57b095924/bohra-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74aaeba9cbf42e39bb700f3667ccb812", "sha256": "e2ab26849653605ad43eb80b239be354163738fda03dea4c5e8d3fd6dbd3a8a5" }, "downloads": -1, "filename": "bohra-1.0.4.tar.gz", "has_sig": false, "md5_digest": "74aaeba9cbf42e39bb700f3667ccb812", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38617, "upload_time": "2019-07-29T03:25:46", "url": "https://files.pythonhosted.org/packages/f1/73/66e0e214129f13c11a06c182030c1c87edf1418ec054bdf325d64ede6378/bohra-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "3a93aa2686eb72c41879314f4d2bcea1", "sha256": "3d602bfe7bc0ea7be2e63aae03d6e25b72a9f8eaa442bd6481fad2530efa4ddf" }, "downloads": -1, "filename": "bohra-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "3a93aa2686eb72c41879314f4d2bcea1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 51049, "upload_time": "2019-07-29T04:53:37", "url": "https://files.pythonhosted.org/packages/d2/03/42d22e6c7fa1bb8ad0dff6ebd72766e65e11f9e83e855f43967dac0248d3/bohra-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f81a667e200eec9d796a09fabfdb2f7c", "sha256": "f14fecdbb993114efbe059aa5e7810fbf3e397d13c2cc41141fbc74ea3da814a" }, "downloads": -1, "filename": "bohra-1.0.5.tar.gz", "has_sig": false, "md5_digest": "f81a667e200eec9d796a09fabfdb2f7c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 38650, "upload_time": "2019-07-29T04:53:40", "url": "https://files.pythonhosted.org/packages/3a/11/e871eddfd0691f15033a6f78380d0d2ec6d7bd1b885041ee061246eadf3e/bohra-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "2b7cc1f23c2b46899d7d7a87f884859c", "sha256": "d7bde3eac481466d985df5520e0c175cb39c248052515f693b73240da0588e20" }, "downloads": -1, "filename": "bohra-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2b7cc1f23c2b46899d7d7a87f884859c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53440, "upload_time": "2019-07-30T04:51:38", "url": "https://files.pythonhosted.org/packages/9a/14/954179fe08ac0a85ae58ddd911ded4ff40cbbc3fada70c9e9ae831f98bad/bohra-1.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c52d90cbf48b0202ec96d493e894d01", "sha256": "0e956a79cebf60a5ae0c6195e6c4ae9496d64b8d01a2a942674a30503a30fcb6" }, "downloads": -1, "filename": "bohra-1.0.6.tar.gz", "has_sig": false, "md5_digest": "0c52d90cbf48b0202ec96d493e894d01", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 40815, "upload_time": "2019-07-30T04:51:41", "url": "https://files.pythonhosted.org/packages/95/3b/9277fc543aca50866da0d5398f11be4451dc6fc8877ea84e734df06c759d/bohra-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "0d9a6672454ea6f972e52a192a418fa5", "sha256": "705eaf317e4ecba9c4fc9be2f9b6c5a766f1790547b67434b4ef2f1854c19109" }, "downloads": -1, "filename": "bohra-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "0d9a6672454ea6f972e52a192a418fa5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53425, "upload_time": "2019-07-31T00:51:42", "url": "https://files.pythonhosted.org/packages/e0/4e/972a62a46fba8e7c7c669ccc76c3e72e3ff624ec3598ee61eaa5cf53ae33/bohra-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b216dbd20f1c01aac6e16e7943d16015", "sha256": "b7610f2403c632c0e3cb030afc64ade4ca4f580169d6b6ca35133190f3d14f05" }, "downloads": -1, "filename": "bohra-1.0.7.tar.gz", "has_sig": false, "md5_digest": "b216dbd20f1c01aac6e16e7943d16015", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 40813, "upload_time": "2019-07-31T00:51:44", "url": "https://files.pythonhosted.org/packages/02/f6/2ed10c88212773ead8e8450c174a1482b394f21ebf9cd1a779fe5e6fe28f/bohra-1.0.7.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "10419d426df26f8f6265e183e68ba966", "sha256": "0ea255ad7871fecb51323a373251e0c4d6300478624a0153480624c8506c2d47" }, "downloads": -1, "filename": "bohra-1.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "10419d426df26f8f6265e183e68ba966", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 53425, "upload_time": "2019-07-31T01:58:45", "url": "https://files.pythonhosted.org/packages/d7/e4/b56ae364e5ef66cc8bf829768e8fd8d0bdac30151c705f477e87ce0e5345/bohra-1.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db589bc92625b164943fd58967c91f25", "sha256": "60532259994d91886e131329bb1c222ad3c5fcc7151f4a6e0939f4714c7415ce" }, "downloads": -1, "filename": "bohra-1.0.9.tar.gz", "has_sig": false, "md5_digest": "db589bc92625b164943fd58967c91f25", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 40823, "upload_time": "2019-07-31T01:58:47", "url": "https://files.pythonhosted.org/packages/93/27/760ccd235470be0e9b514acf955052d2533e57f1517a45e3388e9552f4e4/bohra-1.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8df2dd9e48f5f905c290ff5477a3a5f8", "sha256": "2a137847284ab2f52cf8869fb2755e2f7e246ba820f6c18b2ec1d3836f8ce137" }, "downloads": -1, "filename": "bohra-1.0.26-py3-none-any.whl", "has_sig": false, "md5_digest": "8df2dd9e48f5f905c290ff5477a3a5f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.7", "size": 2038174, "upload_time": "2019-09-25T07:11:50", "url": "https://files.pythonhosted.org/packages/87/ef/91a21a07f8cfd6af7520840f628471772af0b328c7021903a2ebc10a00b4/bohra-1.0.26-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b88c8bb2c92c00190f3bd2880cce39d5", "sha256": "34d55a54bca5fff13e7a19f1e8ba3afe46ad7dde98dbeeaae234b81b38edf82d" }, "downloads": -1, "filename": "bohra-1.0.26.tar.gz", "has_sig": false, "md5_digest": "b88c8bb2c92c00190f3bd2880cce39d5", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.7", "size": 1984148, "upload_time": "2019-09-25T07:11:54", "url": "https://files.pythonhosted.org/packages/7c/c6/b28e8b6e8cfaa39264e6d0763eff754455a041c31c76c91119061d19299c/bohra-1.0.26.tar.gz" } ] }