{ "info": { "author": "Verily", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: System :: Distributed Computing" ], "description": "# dsub: simple batch jobs with Docker\n[![License](https://img.shields.io/badge/license-Apache%202.0-brightgreen.svg)](https://github.com/DataBiosphere/dsub/blob/main/LICENSE)\n\n## Overview\n\n`dsub` is a command-line tool that makes it easy to submit and run batch scripts\nin the cloud.\n\nThe `dsub` user experience is modeled after traditional high-performance\ncomputing job schedulers like Grid Engine and Slurm. You write a script and\nthen submit it to a job scheduler from a shell prompt on your local machine.\n\nToday `dsub` supports Google Cloud as the backend batch job runner, along with a\nlocal provider for development and testing. With help from the community, we'd\nlike to add other backends, such as a Grid Engine, Slurm, Amazon Batch,\nand Azure Batch.\n\n## Getting started\n\nYou can install `dsub` from [PyPI](https://pypi.org/project/dsub/), or you can clone and\ninstall from [github](https://github.com/DataBiosphere/dsub).\n\n### Sunsetting Python 2 support\n\nPython 2 support ended in January 2020.\nSee Python's official [Sunsetting Python 2 announcement](https://www.python.org/doc/sunset-python-2/) for details.\n\nAutomated `dsub` tests running on Python 2 have been disabled.\n[Release 0.3.10](https://github.com/DataBiosphere/dsub/releases/tag/v0.3.10) is\nthe last version of `dsub` that supports Python 2.\n\nUse Python 3.6 or greater. For earlier versions of Python 3, use `dsub` 0.4.1.\n\n### Pre-installation steps\n\nThis is optional, but whether installing from PyPI or from github,\nyou are encouraged to use a\n[Python virtual environment](https://docs.python.org/3/library/venv.html).\n\nYou can do this in a directory of your choosing.\n\n python3 -m venv dsub_libs\n source dsub_libs/bin/activate\n\nUsing a Python virtual environment isolates `dsub` library dependencies from\nother Python applications on your system.\n\nActivate this virtual environment in any shell session before running `dsub`.\nTo deactivate the virtual environment in your shell, run the command:\n\n deactivate\n\nAlternatively, a set of convenience scripts are provided that activate the\nvirutalenv before calling `dsub`, `dstat`, and `ddel`. They are in the\n[bin](https://github.com/DataBiosphere/dsub/tree/main/bin) directory. You can\nuse these scripts if you don't want to activate the virtualenv explicitly in\nyour shell.\n\n### Install `dsub`\n\nChoose one of the following:\n\n#### Install from PyPI\n\n1. If necessary, [install pip](https://pip.pypa.io/en/stable/installing/).\n\n1. Install `dsub`\n\n pip install dsub\n\n#### Install from github\n\n1. Be sure you have git installed\n\n Instructions for your environment can be found on the\n [git website](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).\n\n1. Clone this repository.\n\n git clone https://github.com/DataBiosphere/dsub\n cd dsub\n\n1. Install dsub (this will also install the dependencies)\n\n python setup.py install\n\n1. Set up Bash tab completion (optional).\n\n source bash_tab_complete\n\n### Post-installation steps\n\n1. Minimally verify the installation by running:\n\n dsub --help\n\n1. (Optional) [Install Docker](https://docs.docker.com/engine/installation/).\n\n This is necessary only if you're going to create your own Docker images or\n use the `local` provider.\n\n### Makefile\n\nAfter cloning the dsub repo, you can also use the\n[Makefile](https://github.com/DataBiosphere/dsub/blob/main/Makefile)\nby running:\n\n make\n\nThis will create a Python virtual environment and install `dsub` into a\ndirectory named `dsub_libs`.\n\n### Getting started with the local provider\n\nWe think you'll find the `local` provider to be very helpful when building\nyour `dsub` tasks. Instead of submitting a request to run your command on a\ncloud VM, the `local` provider runs your `dsub` tasks on your local machine.\n\nThe `local` provider is not designed for running at scale. It is designed\nto emulate running on a cloud VM such that you can rapidly iterate.\nYou'll get quicker turnaround times and won't incur cloud charges using it.\n\n1. Run a `dsub` job and wait for completion.\n\n Here is a very simple \"Hello World\" test:\n\n dsub \\\n --provider local \\\n --logging \"${TMPDIR:-/tmp}/dsub-test/logging/\" \\\n --output OUT=\"${TMPDIR:-/tmp}/dsub-test/output/out.txt\" \\\n --command 'echo \"Hello World\" > \"${OUT}\"' \\\n --wait\n\n Note: `TMPDIR` is commonly set to `/tmp` by default on most Unix systems,\n although it is also often left unset.\n On some versions of MacOS TMPDIR is set to a location under `/var/folders`.\n\n Note: The above syntax `${TMPDIR:-/tmp}` is known to be supported by Bash, zsh, ksh.\n The shell will expand `TMPDIR`, but if it is unset, `/tmp` will be used.\n\n1. View the output file.\n\n cat \"${TMPDIR:-/tmp}/dsub-test/output/out.txt\"\n\n### Getting started on Google Cloud\n\n`dsub` supports the use of two different APIs from Google Cloud for running\ntasks. Google Cloud is transitioning from `Genomics v2alpha1`\nto [Cloud Life Sciences v2beta](https://cloud.google.com/life-sciences/docs/reference/rest).\n\n`dsub` supports both APIs with the (old) `google-v2` and (new) `google-cls-v2`\nproviders respectively. `google-v2` is the current default provider. `dsub`\nwill be transitioning to make `google-cls-v2` the default in coming releases.\n\nThe steps for getting started differ slightly as indicated in the steps below:\n\n1. Sign up for a Google account and\n [create a project](https://console.cloud.google.com/project?).\n\n1. Enable the APIs:\n\n - For the `v2alpha1` API (provider: `google-v2`):\n\n [Enable the Genomics, Storage, and Compute APIs](https://console.cloud.google.com/flows/enableapi?apiid=genomics,storage_component,compute_component&redirect=https://console.cloud.google.com).\n\n - For the `v2beta` API (provider: `google-cls-v2`):\n\n [Enable the Cloud Life Sciences, Storage, and Compute APIs](https://console.cloud.google.com/flows/enableapi?apiid=lifesciences.googleapis.com,storage_component,compute_component&redirect=https://console.cloud.google.com)\n\n1. [Install the Google Cloud SDK](https://cloud.google.com/sdk/) and run\n\n gcloud init\n\n This will set up your default project and grant credentials to the Google\n Cloud SDK. Now provide [credentials](https://developers.google.com/identity/protocols/application-default-credentials)\n so `dsub` can call Google APIs:\n\n gcloud auth application-default login\n\n1. Create a [Google Cloud Storage](https://cloud.google.com/storage) bucket.\n\n The dsub logs and output files will be written to a bucket. Create a\n bucket using the [storage browser](https://console.cloud.google.com/storage/browser?project=)\n or run the command-line utility [gsutil](https://cloud.google.com/storage/docs/gsutil),\n included in the Cloud SDK.\n\n gsutil mb gs://my-bucket\n\n Change `my-bucket` to a unique name that follows the\n [bucket-naming conventions](https://cloud.google.com/storage/docs/bucket-naming).\n\n (By default, the bucket will be in the US, but you can change or\n refine the [location](https://cloud.google.com/storage/docs/bucket-locations)\n setting with the `-l` option.)\n\n1. Run a very simple \"Hello World\" `dsub` job and wait for completion.\n\n - For the `v2alpha1` API (provider: `google-v2`):\n\n dsub \\\n --provider google-v2 \\\n --project my-cloud-project \\\n --regions us-central1 \\\n --logging gs://my-bucket/logging/ \\\n --output OUT=gs://my-bucket/output/out.txt \\\n --command 'echo \"Hello World\" > \"${OUT}\"' \\\n --wait\n\n Change `my-cloud-project` to your Google Cloud project, and `my-bucket` to\n the bucket you created above.\n\n - For the `v2beta` API (provider: `google-cls-v2`):\n\n dsub \\\n --provider google-cls-v2 \\\n --project my-cloud-project \\\n --regions us-central1 \\\n --logging gs://my-bucket/logging/ \\\n --output OUT=gs://my-bucket/output/out.txt \\\n --command 'echo \"Hello World\" > \"${OUT}\"' \\\n --wait\n\n Change `my-cloud-project` to your Google Cloud project, and `my-bucket` to\n the bucket you created above.\n\n The output of the script command will be written to the `OUT` file in Cloud\n Storage that you specify.\n\n1. View the output file.\n\n gsutil cat gs://my-bucket/output/out.txt\n\n## Backend providers\n\nWhere possible, `dsub` tries to support users being able to develop and test\nlocally (for faster iteration) and then progressing to running at scale.\n\nTo this end, `dsub` provides multiple \"backend providers\", each of which\nimplements a consistent runtime environment. The current providers are:\n\n- local\n- google-v2 (the default)\n- google-cls-v2 (*new*)\n\nMore details on the runtime environment implemented by the backend providers\ncan be found in [dsub backend providers](https://github.com/DataBiosphere/dsub/blob/main/docs/providers/README.md).\n\n### Differences between `google-v2` and `google-cls-v2`\n\nThe `google-cls-v2` provider is built on the Cloud Life Sciences `v2beta` API.\nThis API is very similar to its predecessor, the Genomics `v2alpha1` API.\nDetails of the differences can be found in the\n[Migration Guide](https://cloud.google.com/life-sciences/docs/how-tos/migration).\n\n`dsub` largely hides the differences between the two APIs, but there are a\nfew difference to note:\n\n- `v2beta` is a regional service, `v2alpha1` is a global service\n\nWhat this means is that with `v2alpha1`, the metadata about your tasks\n(called \"operations\"), is stored in a global database, while with `v2beta`, the\nmetadata about your tasks are stored in a regional database. If your operation\ninformation needs to stay in a particular region, use the `v2beta` API\n(the `google-cls-v2` provider), and specify the `--location` where your\noperation information should be stored.\n\n- The `--regions` and `--zones` flags can be omitted when using `google-cls-v2`\n\nThe `--regions` and `--zones` flags for `dsub` specify where the tasks should\nrun. More specifically, this specifies what Compute Engine Zones to use for\nthe VMs that run your tasks.\n\nWith the `google-v2` provider, there is no default region or zone, and thus\none of the `--regions` or `--zones` flags is required.\n\nWith `google-cls-v2`, the `--location` flag defaults to `us-central1`, and\nif the `--regions` and `--zones` flags are omitted, the `location` will be\nused as the default `regions` list.\n\n## `dsub` features\n\nThe following sections show how to run more complex jobs.\n\n### Defining what code to run\n\nYou can provide a shell command directly in the dsub command-line, as in the\nhello example above.\n\nYou can also save your script to a file, like `hello.sh`. Then you can run:\n\n dsub \\\n ... \\\n --script hello.sh\n\nIf your script has dependencies that are not stored in your Docker image,\nyou can transfer them to the local disk. See the instructions below for\nworking with input and output files and folders.\n\n### Selecting a Docker image\n\nTo get started more easily, `dsub` uses a stock Ubuntu Docker image.\nThis default image may change at any time in future releases, so for\nreproducible production workflows, you should always specify the image\nexplicitly.\n\nYou can change the image by passing the `--image` flag.\n\n dsub \\\n ... \\\n --image ubuntu:16.04 \\\n --script hello.sh\n\nNote: your `--image` must include the\n[Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) shell interpreter.\n\nFor more information on using the\n`--image` flag, see the\n[image section in Scripts, Commands, and Docker](https://github.com/DataBiosphere/dsub/blob/main/docs/code.md#--image-docker-image)\n\n### Passing parameters to your script\n\nYou can pass environment variables to your script using the `--env` flag.\n\n dsub \\\n ... \\\n --env MESSAGE=hello \\\n --command 'echo ${MESSAGE}'\n\nThe environment variable `MESSAGE` will be assigned the value `hello` when\nyour Docker container runs.\n\nYour script or command can reference the variable like any other Linux\nenvironment variable, as `${MESSAGE}`.\n\n**Be sure to enclose your command string in single quotes and not double\nquotes. If you use double quotes, the command will be expanded in your local\nshell before being passed to dsub. For more information on using the\n`--command` flag, see [Scripts, Commands, and Docker](https://github.com/DataBiosphere/dsub/blob/main/docs/code.md)**\n\nTo set multiple environment variables, you can repeat the flag:\n\n --env VAR1=value1 \\\n --env VAR2=value2\n\nYou can also set multiple variables, space-delimited, with a single flag:\n\n --env VAR1=value1 VAR2=value2\n\n### Working with input and output files and folders\n\ndsub mimics the behavior of a shared file system using cloud storage\nbucket paths for input and output files and folders. You specify\nthe cloud storage bucket path. Paths can be:\n\n* file paths like `gs://my-bucket/my-file`\n* folder paths like `gs://my-bucket/my-folder`\n* wildcard paths like `gs://my-bucket/my-folder/*`\n\nSee the [inputs and outputs](https://github.com/DataBiosphere/dsub/blob/main/docs/input_output.md)\ndocumentation for more details.\n\n### Transferring input files to a Google Cloud Storage bucket.\n\nIf your script expects to read local input files that are not already\ncontained within your Docker image, the files must be available in Google\nCloud Storage.\n\nIf your script has dependent files, you can make them available to your script\nby:\n\n * Building a private Docker image with the dependent files and publishing the\n image to a public site, or privately to Google Container Registry\n * Uploading the files to Google Cloud Storage\n\nTo upload the files to Google Cloud Storage, you can use the\n[storage browser](https://console.cloud.google.com/storage/browser?project=) or\n[gsutil](https://cloud.google.com/storage/docs/gsutil). You can also run on data\nthat\u2019s public or shared with your service account, an email address that you\ncan find in the [Google Cloud Console](https://console.cloud.google.com).\n\n#### Files\n\nTo specify input and output files, use the `--input` and `--output` flags:\n\n dsub \\\n ... \\\n --input INPUT_FILE_1=gs://my-bucket/my-input-file-1 \\\n --input INPUT_FILE_2=gs://my-bucket/my-input-file-2 \\\n --output OUTPUT_FILE=gs://my-bucket/my-output-file \\\n --command 'cat \"${INPUT_FILE_1}\" \"${INPUT_FILE_2}\" > \"${OUTPUT_FILE}\"'\n\nIn this example:\n\n- a file will be copied from `gs://my-bucket/my-input-file-1` to a path on the data disk\n- the path to the file on the data disk will be set in the environment variable `${INPUT_FILE_1}`\n- a file will be copied from `gs://my-bucket/my-input-file-2` to a path on the data disk\n- the path to the file on the data disk will be set in the environment variable `${INPUT_FILE_2}`\n\nThe `--command` can reference the file paths using the environment variables.\n\nAlso in this example:\n\n- a path on the data disk will be set in the environment variable `${OUTPUT_FILE}`\n- the output file will written to the data disk at the location given by `${OUTPUT_FILE}`\n\nAfter the `--command` completes, the output file will be copied to the bucket path `gs://my-bucket/my-output-file`\n\nMultiple `--input`, and `--output` parameters can be specified and\nthey can be specified in any order.\n\n#### Folders\n\nTo copy folders rather than files, use the `--input-recursive` and\n`output-recursive` flags:\n\n dsub \\\n ... \\\n --input-recursive FOLDER=gs://my-bucket/my-folder \\\n --command 'find ${FOLDER} -name \"foo*\"'\n\nMultiple `--input-recursive`, and `--output-recursive` parameters can be\nspecified and they can be specified in any order.\n\n#### Mounting \"resource data\"\n\nIf you have one of the following:\n\n1. A large set of resource files, your code only reads a subset of those files,\nand the decision of which files to read is determined at runtime, or\n2. A large input file over which your code makes a single read pass or only\nneeds to read a small range of bytes,\n\nthen you may find it more efficient at runtime to access this resource data via\nmounting a Google Cloud Storage bucket read-only or mounting a persistent disk\ncreated from a\n[Compute Engine Image](https://cloud.google.com/compute/docs/images) read-only.\n\nThe `google-v2` and `google-cls-v2` providers support these two methods of providing access to\nresource data. The `local` provider supports mounting a local directory in a\nsimilar fashion to support your local development.\n\nTo have the `google-v2` or `google-cls-v2` provider mount a Cloud Storage bucket using\nCloud Storage FUSE, use the `--mount` command line flag:\n\n --mount MYBUCKET=gs://mybucket\n\nThe bucket will be mounted into the Docker container running your `--script`\nor `--command` and the location made available via the environment variable\n`${MYBUCKET}`. Inside your script, you can reference the mounted path using the\nenvironment variable. Please read\n[Key differences from a POSIX file system](https://cloud.google.com/storage/docs/gcs-fuse#notes)\nand [Semantics](https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/semantics.md)\nbefore using Cloud Storage FUSE.\n\nTo have the `google-v2` or `google-cls-v2` provider mount a persistent disk created from an image,\nuse the `--mount` command line flag and the url of the source image and the size\n(in GB) of the disk:\n\n --mount MYDISK=\"https://www.googleapis.com/compute/v1/projects/your-project/global/images/your-image 50\"\n\nThe image will be used to create a new persistent disk, which will be attached\nto a Compute Engine VM. The disk will mounted into the Docker container running\nyour `--script` or `--command` and the location made available by the\nenvironment variable `${MYDISK}`. Inside your script, you can reference the\nmounted path using the environment variable.\n\nTo create an image, see [Creating a custom image](https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images).\n\nTo have the `local` provider mount a directory read-only, use the `--mount`\ncommand line flag and a `file://` prefix:\n\n --mount LOCAL_MOUNT=file://path/to/my/dir\n\nThe local directory will be mounted into the Docker container running your\n`--script`or `--command` and the location made available via the environment\nvariable `${LOCAL_MOUNT}`. Inside your script, you can reference the mounted\npath using the environment variable.\n\n### Setting resource requirements\n\n`dsub` tasks run using the `local` provider will use the resources available on\nyour local machine.\n\n`dsub` tasks run using the `google`, `google-v2`, or `google-cls-v2` providers can take advantage\nof a wide range of CPU, RAM, disk, and hardware accelerator (eg. GPU) options.\n\nSee the [Compute Resources](https://github.com/DataBiosphere/dsub/blob/main/docs/compute_resources.md)\ndocumentation for details.\n\n### Submitting a batch job\n\nEach of the examples above has demonstrated submitting a single task with\na single set of variables, inputs, and outputs. If you have a batch of inputs\nand you want to run the same operation over them, `dsub` allows you\nto create a batch job.\n\nInstead of calling `dsub` repeatedly, you can create\na tab-separated values (TSV) file containing the variables,\ninputs, and outputs for each task, and then call `dsub` once.\nThe result will be a single `job-id` with multiple tasks. The tasks will\nbe scheduled and run independently, but can be\n[monitored](https://github.com/DataBiosphere/dsub#viewing-job-status) and\n[deleted](https://github.com/DataBiosphere/dsub#deleting-a-job) as a group.\n\n#### Tasks file format\n\nThe first line of the TSV file specifies the names and types of the\nparameters. For example:\n\n --env SAMPLE_ID--input VCF_FILE--output OUTPUT_PATH\n\nEach addition line in the file should provide the variable, input, and output\nvalues for each task. Each line beyond the header represents the values for a\nseparate task.\n\nMultiple `--env`, `--input`, and `--output` parameters can be specified and\nthey can be specified in any order. For example:\n\n --env SAMPLE--input A--input B--env REFNAME--output O\n S1gs://path/A1.txtgs://path/B1.txtR1gs://path/O1.txt\n S2gs://path/A2.txtgs://path/B2.txtR2gs://path/O2.txt\n\n\n#### Tasks parameter\n\nPass the TSV file to dsub using the `--tasks` parameter. This parameter\naccepts both the file path and optionally a range of tasks to process.\nThe file may be read from the local filesystem (on the machine you're calling\n`dsub` from), or from a bucket in Google Cloud Storage (file name starts with\n\"gs://\").\n\nFor example, suppose `my-tasks.tsv` contains 101 lines: a one-line header and\n100 lines of parameters for tasks to run. Then:\n\n dsub ... --tasks ./my-tasks.tsv\n\nwill create a job with 100 tasks, while:\n\n dsub ... --tasks ./my-tasks.tsv 1-10\n\nwill create a job with 10 tasks, one for each of lines 2 through 11.\n\nThe task range values can take any of the following forms:\n\n* `m` indicates to submit task `m` (line m+1)\n* `m-` indicates to submit all tasks starting with task `m`\n* `m-n` indicates to submit all tasks from `m` to `n` (inclusive).\n\n### Logging\n\nThe `--logging` flag points to a location for `dsub` task log files. For details\non how to specify your logging path, see [Logging](https://github.com/DataBiosphere/dsub/blob/main/docs/logging.md).\n\n### Job control\n\nIt's possible to wait for a job to complete before starting another.\nFor details, see [job control with dsub](https://github.com/DataBiosphere/dsub/blob/main/docs/job_control.md).\n\n### Retries\n\nIt is possible for `dsub` to automatically retry failed tasks.\nFor details, see [retries with dsub](https://github.com/DataBiosphere/dsub/blob/main/docs/retries.md).\n\n### Labeling jobs and tasks\n\nYou can add custom labels to jobs and tasks, which allows you to monitor and\ncancel tasks using your own identifiers. In addition, with the Google\nproviders, labeling a task will label associated compute resources such as\nvirtual machines and disks.\n\nFor more details, see [Checking Status and Troubleshooting Jobs](https://github.com/DataBiosphere/dsub/blob/main/docs/troubleshooting.md)\n\n### Viewing job status\n\nThe `dstat` command displays the status of jobs:\n\n dstat --provider google-v2 --project my-cloud-project\n\nWith no additional arguments, dstat will display a list of *running* jobs for\nthe current `USER`.\n\nTo display the status of a specific job, use the `--jobs` flag:\n\n dstat --provider google-v2 --project my-cloud-project --jobs job-id\n\nFor a batch job, the output will list all *running* tasks.\n\nEach job submitted by dsub is given a set of metadata values that can be\nused for job identification and job control. The metadata associated with\neach job includes:\n\n* `job-name`: defaults to the name of your script file or the first word of\n your script command; it can be explicitly set with the `--name` parameter.\n* `user-id`: the `USER` environment variable value.\n* `job-id`: takes the form `job-name--userid--timestamp` where the `job-name`\n is truncated at 10 characters and the `timestamp` is of the form\n `YYMMDD-HHMMSS-XX`, unique to hundredths of a second.\n* `task-id`: if the job is submitted with the `--tasks` parameter, each task\n gets a sequential value of the form \"task-*n*\" where *n* is 1-based.\n\nNote that the job metadata values will be modified to conform with the \"Label\nRestrictions\" listed in the [Checking Status and Troubleshooting Jobs](https://github.com/DataBiosphere/dsub/blob/main/docs/troubleshooting.md)\nguide.\n\nMetadata can be used to cancel a job or individual tasks within a batch job.\n\nFor more details, see [Checking Status and Troubleshooting Jobs](https://github.com/DataBiosphere/dsub/blob/main/docs/troubleshooting.md)\n\n#### Summarizing job status\n\nBy default, dstat outputs one line per task. If you're using a batch job with\nmany tasks then you may benefit from `--summary`.\n\n```\n$ dstat --provider google-v2 --project my-project --status '*' --summary\n\nJob Name Status Task Count\n------------- ------------- -------------\nmy-job-name RUNNING 2\nmy-job-name SUCCESS 1\n```\n\nIn this mode, dstat prints one line per (job name, task status) pair. You can\nsee at a glance how many tasks are finished, how many are still running, and\nhow many are failed/canceled.\n\n### Deleting a job\n\nThe `ddel` command will delete running jobs.\n\nBy default, only jobs submitted by the current user will be deleted.\nUse the `--users` flag to specify other users, or `'*'` for all users.\n\nTo delete a running job:\n\n ddel --provider google-v2 --project my-cloud-project --jobs job-id\n\nIf the job is a batch job, all running tasks will be deleted.\n\nTo delete specific tasks:\n\n ddel \\\n --provider google-v2 \\\n --project my-cloud-project \\\n --jobs job-id \\\n --tasks task-id1 task-id2\n\nTo delete all running jobs for the current user:\n\n ddel --provider google-v2 --project my-cloud-project --jobs '*'\n\n## Service Accounts and Scope (Google providers only)\n\nWhen you run the `dsub` command with the `google-v2` or `google-cls-v2`\nprovider, there are two different sets of credentials to consider:\n\n- Account submitting the `pipelines.run()` request to run your command/script on a VM\n- Account accessing Cloud resources (such as files in GCS) when executing your command/script\n\nThe account used to submit the `pipelines.run()` request is typically your\nend user credentials. You would have set this up by running:\n\n gcloud auth application-default login\n\nThe account used on the VM is a [service account](https://cloud.google.com/iam/docs/service-accounts).\nThe image below illustrates this:\n\n![Pipelines Runner Architecture](./docs/images/pipelines_runner_architecture.png)\n\nBy default, `dsub` will use the [default Compute Engine service account](https://cloud.google.com/compute/docs/access/service-accounts#default_service_account)\nas the authorized service account on the VM instance. You can choose to specify\nthe email address of another service acount using `--service-account`.\n\nBy default, `dsub` will grant the following access scopes to the service account:\n\n- https://www.googleapis.com/auth/bigquery\n- https://www.googleapis.com/auth/compute\n- https://www.googleapis.com/auth/devstorage.full_control\n- https://www.googleapis.com/auth/genomics\n- https://www.googleapis.com/auth/logging.write\n- https://www.googleapis.com/auth/monitoring.write\n\nIn addition, [the API](https://cloud.google.com/life-sciences/docs/reference/rest/v2beta/projects.locations.pipelines/run#serviceaccount) will always add this scope:\n\n- https://www.googleapis.com/auth/cloud-platform\n\nYou can choose to specify scopes using `--scopes`.\n\n### Recommendations for service accounts\n\nWhile it is straightforward to use the default service account, this account also\nhas broad privileges granted to it by default. Following the\n[Principle of Least Privilege](https://en.wikipedia.org/wiki/Principle_of_least_privilege)\nyou may want to create and use a service account that has only sufficient privileges\ngranted in order to run your `dsub` command/script.\n\nTo create a new service account, follow the steps below:\n\n1. Execute the `gcloud iam service-accounts create` command. The email address\nof the service account will be `sa-name@project-id.iam.gserviceaccount.com`.\n\n gcloud iam service-accounts create \"sa-name\"\n\n2. Grant IAM access on buckets, etc. to the service account.\n\n gsutil iam ch serviceAccount:sa-name@project-id.iam.gserviceaccount.com:roles/storage.objectAdmin gs://bucket-name\n\n3. Update your `dsub` command to include `--service-account`\n\n dsub \\\n --service-account sa-name@project-id.iam.gserviceaccount.com\n ...\n\n## What next?\n\n* See the examples:\n\n * [Custom scripts](https://github.com/DataBiosphere/dsub/tree/main/examples/custom_scripts)\n * [Decompress files](https://github.com/DataBiosphere/dsub/tree/main/examples/decompress)\n * [FastQC](https://github.com/DataBiosphere/dsub/tree/main/examples/fastqc)\n * [Samtools index](https://github.com/DataBiosphere/dsub/tree/main/examples/samtools)\n\n* See more documentation for:\n\n * [Scripts, Commands, and Docker](https://github.com/DataBiosphere/dsub/blob/main/docs/code.md)\n * [Input and Output File Handling](https://github.com/DataBiosphere/dsub/blob/main/docs/input_output.md)\n * [Logging](https://github.com/DataBiosphere/dsub/blob/main/docs/logging.md)\n * [Compute Resources](https://github.com/DataBiosphere/dsub/blob/main/docs/compute_resources.md)\n * [Compute Quotas](https://github.com/DataBiosphere/dsub/blob/main/docs/compute_quotas.md)\n * [Job Control](https://github.com/DataBiosphere/dsub/blob/main/docs/job_control.md)\n * [Retries](https://github.com/DataBiosphere/dsub/blob/main/docs/retries.md)\n * [Checking Status and Troubleshooting Jobs](https://github.com/DataBiosphere/dsub/blob/main/docs/troubleshooting.md)\n * [Backend providers](https://github.com/DataBiosphere/dsub/blob/main/docs/providers/README.md)\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/DataBiosphere/dsub", "keywords": "cloud bioinformatics", "license": "Apache", "maintainer": "", "maintainer_email": "", "name": "dsub", "package_url": "https://pypi.org/project/dsub/", "platform": "", "project_url": "https://pypi.org/project/dsub/", "project_urls": { "Homepage": "https://github.com/DataBiosphere/dsub" }, "release_url": "https://pypi.org/project/dsub/0.4.6/", "requires_dist": [ "funcsigs (<=1.0.2)", "google-api-core (<=2.4.0)", "google-api-python-client (<=2.36.0)", "google-auth-httplib2 (<=0.1.0)", "google-auth (<=2.3.0)", "httplib2 (<=0.20.2)", "mock (<=4.0.3)", "parameterized (<=0.8.1)", "pyasn1-modules (<=0.2.8)", "pyasn1 (<=0.4.8)", "python-dateutil (<=2.8.2)", "pytz (<=2021.3)", "pyyaml (<=6.0)", "rsa (<=4.8)", "tabulate (<=0.8.9)", "tenacity (<=7.0.0)", "uritemplate (<=4.1.1)" ], "requires_python": ">=3.6", "summary": "A command-line tool that makes it easy to submit and run batch scripts in the cloud", "version": "0.4.6", "yanked": false, "yanked_reason": null }, "last_serial": 12704659, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "ab65e62592c0f23b895250baa68094b3", "sha256": "8cac09348bd2a272b19455127c012dc7eda08a4a92728c0e5fd5c49d245ed3a4" }, "downloads": -1, "filename": "dsub-0.0.0.tar.gz", "has_sig": false, "md5_digest": "ab65e62592c0f23b895250baa68094b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62263, "upload_time": "2017-08-21T22:09:17", "upload_time_iso_8601": "2017-08-21T22:09:17.965403Z", "url": "https://files.pythonhosted.org/packages/96/0f/48c9dcf9b37afca13ce86ac86f1c0d6ee0f95c154d5655e791e5c38373e8/dsub-0.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "c47f77508b53d80f9ef9358ace864d3a", "sha256": "07c0a1a6fa236a0b4aa10217ec92b16b8b826fe39ef70528d905be74510b8031" }, "downloads": -1, "filename": "dsub-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "c47f77508b53d80f9ef9358ace864d3a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 94325, "upload_time": "2017-10-03T21:59:42", "upload_time_iso_8601": "2017-10-03T21:59:42.799202Z", "url": "https://files.pythonhosted.org/packages/dd/13/fd3db9293520762f2bc0c59f13e7076fc60ced5d1ef8e4bb8a76ee704d9f/dsub-0.1.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e6fa3f1863d849b53c13a2b99dcce8be", "sha256": "4339d4231ddd889bc294964c61ff69d974643b63971908f45f1d1695e4e6b4c0" }, "downloads": -1, "filename": "dsub-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e6fa3f1863d849b53c13a2b99dcce8be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76740, "upload_time": "2017-10-03T21:59:44", "upload_time_iso_8601": "2017-10-03T21:59:44.681087Z", "url": "https://files.pythonhosted.org/packages/91/db/8cdcc4fc8a93049bbd605444129687648b537a47c9ff7f371b9e3088a810/dsub-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "779ba5b76695082b1b101e76a540e8bf", "sha256": "21bc712d1f5fbe4aefe47e465f8874103e1a227b79a95c827b8cb1987033800a" }, "downloads": -1, "filename": "dsub-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "779ba5b76695082b1b101e76a540e8bf", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 99155, "upload_time": "2017-10-20T18:23:28", "upload_time_iso_8601": "2017-10-20T18:23:28.295924Z", "url": "https://files.pythonhosted.org/packages/f4/6b/c8b17d2fe0a8ff86f0c003e322abb75ba62eb6f5a0d2a9b91af18a9c3258/dsub-0.1.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7fbcf02644fc16fef8e380dfd086540d", "sha256": "63c9568a5697cfc31d866278e6c9c36c90811c77aaf275a3ba9b52d9046fbc65" }, "downloads": -1, "filename": "dsub-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7fbcf02644fc16fef8e380dfd086540d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80445, "upload_time": "2017-10-20T18:23:31", "upload_time_iso_8601": "2017-10-20T18:23:31.728023Z", "url": "https://files.pythonhosted.org/packages/ca/0e/ef9d239887729ca8a4bc276f5e5263514943c8b82a3424147ab4a31ada4b/dsub-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "bd8685650bcd22812140c916b62c286c", "sha256": "9ba6be94cb2dbec838d50e3f34b95233632951a110b752810de251d4ce6d8e78" }, "downloads": -1, "filename": "dsub-0.1.10-py2-none-any.whl", "has_sig": false, "md5_digest": "bd8685650bcd22812140c916b62c286c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 142639, "upload_time": "2018-08-27T20:43:23", "upload_time_iso_8601": "2018-08-27T20:43:23.911082Z", "url": "https://files.pythonhosted.org/packages/19/56/fecab29259d21125b9a20e8d25c432066aaed1062f46e89992309c0516e1/dsub-0.1.10-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0d82596109bc6e95bcfae67b83c09b6a", "sha256": "55af8fdfc6a78813b3829dae3db57daaa16955f91c2ce3f5759da526d6ffa3e5" }, "downloads": -1, "filename": "dsub-0.1.10.tar.gz", "has_sig": false, "md5_digest": "0d82596109bc6e95bcfae67b83c09b6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 117228, "upload_time": "2018-08-27T20:43:25", "upload_time_iso_8601": "2018-08-27T20:43:25.410462Z", "url": "https://files.pythonhosted.org/packages/f4/a5/dbc4f48193278c39ad0a9e1cfe56864957b9ca820ec18fdc2df0d741ffcc/dsub-0.1.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6b47473627e7d88f00ac317e9c0d6f4e", "sha256": "24a14a718484ae69ed72c06fb1ef75932d27ecb824121a624269774783d0b9d0" }, "downloads": -1, "filename": "dsub-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "6b47473627e7d88f00ac317e9c0d6f4e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 101321, "upload_time": "2017-10-30T18:23:23", "upload_time_iso_8601": "2017-10-30T18:23:23.801204Z", "url": "https://files.pythonhosted.org/packages/3b/71/77bea402e6930e262083fa25fb57c3614ac6689ca2b3139b990d9b3c82b6/dsub-0.1.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b1ece0e7b14490982aa61af4ddb5f60e", "sha256": "fd5938a98920f9c1679c1bc38af7c0f7877099e0fcf2351b0096e9cbfa1e5b51" }, "downloads": -1, "filename": "dsub-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b1ece0e7b14490982aa61af4ddb5f60e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81851, "upload_time": "2017-10-30T18:23:25", "upload_time_iso_8601": "2017-10-30T18:23:25.265068Z", "url": "https://files.pythonhosted.org/packages/62/b4/080e6750183a3a007b46a68dba7874498dff4725041db6f5d05276384fc0/dsub-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a4ceb91a62a8d6e7d4ca660213f0831f", "sha256": "74dac769563a99cae0f337ed35e6c9de18c322c0d24c4b007762366a0f8fe444" }, "downloads": -1, "filename": "dsub-0.1.3-py2.7.egg", "has_sig": false, "md5_digest": "a4ceb91a62a8d6e7d4ca660213f0831f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 201622, "upload_time": "2017-11-07T22:34:40", "upload_time_iso_8601": "2017-11-07T22:34:40.183315Z", "url": "https://files.pythonhosted.org/packages/ca/eb/660df7942605fe18f1bb161a0665390014723350ecd994bbab3a3153b70a/dsub-0.1.3-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e886234d122d1fb473f47b2d65df566b", "sha256": "bc029aec065be2b6d31523113560d7c5c936a998d9c96ef68b83f95c9777610d" }, "downloads": -1, "filename": "dsub-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "e886234d122d1fb473f47b2d65df566b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 101984, "upload_time": "2017-11-07T22:34:38", "upload_time_iso_8601": "2017-11-07T22:34:38.915674Z", "url": "https://files.pythonhosted.org/packages/c2/f6/d758c5326613bd793bfbf1962e368455c99bb5f91cde55b4b31c006df9d1/dsub-0.1.3-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "62788a7a4b1efe70d8ed7d84a4faee6d", "sha256": "a6692578beeaf88f13caa75d62482d6a84b0408818d3375787ea346be2fe380f" }, "downloads": -1, "filename": "dsub-0.1.3.tar.gz", "has_sig": false, "md5_digest": "62788a7a4b1efe70d8ed7d84a4faee6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82812, "upload_time": "2017-11-07T22:34:41", "upload_time_iso_8601": "2017-11-07T22:34:41.524623Z", "url": "https://files.pythonhosted.org/packages/bd/86/6b62e9fc6aef168041d51ee2d428412bcb3be6ced9886adda94d1ae7c66c/dsub-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8898072a2726be427da28fb1c638c908", "sha256": "c355935f3bd569c3cf0fa274df82738d32a760e510f4c2a90af944abb709aae7" }, "downloads": -1, "filename": "dsub-0.1.4-py2-none-any.whl", "has_sig": false, "md5_digest": "8898072a2726be427da28fb1c638c908", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 104980, "upload_time": "2017-11-17T21:58:03", "upload_time_iso_8601": "2017-11-17T21:58:03.957922Z", "url": "https://files.pythonhosted.org/packages/05/78/c5b50fbd0000d6628eed032bda1088066d780790aa054b08bb726a990b1d/dsub-0.1.4-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2ca064ca943b4233fabc97b9e853c06b", "sha256": "b7b1673e3c8f78a3dfe996ecc9d0f8a3df9077ecdbe6551e7b917cb8c18e31db" }, "downloads": -1, "filename": "dsub-0.1.4.tar.gz", "has_sig": false, "md5_digest": "2ca064ca943b4233fabc97b9e853c06b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84260, "upload_time": "2017-11-17T21:58:05", "upload_time_iso_8601": "2017-11-17T21:58:05.345276Z", "url": "https://files.pythonhosted.org/packages/88/34/dada87991ec4ca498ceecf4afa995db8d52245bc7cc47cec93c6916b6497/dsub-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "a902cd80196f37016ddd90ad74abdcf3", "sha256": "066111b80ed36b44d4475da25ee23cbfd7102a7c4dcf9da3c51e81db086692f0" }, "downloads": -1, "filename": "dsub-0.1.5-py2-none-any.whl", "has_sig": false, "md5_digest": "a902cd80196f37016ddd90ad74abdcf3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 109005, "upload_time": "2018-01-16T19:27:02", "upload_time_iso_8601": "2018-01-16T19:27:02.948622Z", "url": "https://files.pythonhosted.org/packages/bc/69/f85d8de5f13aa29ba8269e748308a6eea67988f7fe050793d6fac185c923/dsub-0.1.5-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "baba47767052513e8fe0994e0c435e45", "sha256": "edb6253db1d3089d8a6d42f8ed1ddef76d06ebaa9d905ea93e1a9de7f32a2a85" }, "downloads": -1, "filename": "dsub-0.1.5.tar.gz", "has_sig": false, "md5_digest": "baba47767052513e8fe0994e0c435e45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87820, "upload_time": "2018-01-16T19:27:04", "upload_time_iso_8601": "2018-01-16T19:27:04.707800Z", "url": "https://files.pythonhosted.org/packages/56/73/062eed1a32687776316ebc99b2ef647b87344eb8fccf21e947a3c949d47e/dsub-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "edf7df0dc3cfebc4fca5c7d6d331272c", "sha256": "faae39aae5c54e162aef85c3799758f88fd6d5a19ea9c3403897337069f8527d" }, "downloads": -1, "filename": "dsub-0.1.6-py2.7.egg", "has_sig": false, "md5_digest": "edf7df0dc3cfebc4fca5c7d6d331272c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 235347, "upload_time": "2018-03-12T22:17:41", "upload_time_iso_8601": "2018-03-12T22:17:41.154392Z", "url": "https://files.pythonhosted.org/packages/dd/84/b18b98c478bd4d7a3e5f3de231342e3547c054623aac62d24eee80368dbd/dsub-0.1.6-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4b9ade8b3f26db5ed8420f386774d6d9", "sha256": "8fd30ca5c1433601e7aed441030bf750cbece52b047a0f94fabc06d090af2eab" }, "downloads": -1, "filename": "dsub-0.1.6-py2-none-any.whl", "has_sig": false, "md5_digest": "4b9ade8b3f26db5ed8420f386774d6d9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 117307, "upload_time": "2018-03-12T22:17:39", "upload_time_iso_8601": "2018-03-12T22:17:39.604493Z", "url": "https://files.pythonhosted.org/packages/1d/06/b5bd51b0cbfa058918dfa28c35fdc3b7390770d1f0c6549b41ee26655d13/dsub-0.1.6-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "279cf108d3572342c33a1e9eda013491", "sha256": "534b5985df37073564102abdfdc7eb444ab055f3120d092930f17e9f60f20bdc" }, "downloads": -1, "filename": "dsub-0.1.6.tar.gz", "has_sig": false, "md5_digest": "279cf108d3572342c33a1e9eda013491", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95504, "upload_time": "2018-03-12T22:17:42", "upload_time_iso_8601": "2018-03-12T22:17:42.834909Z", "url": "https://files.pythonhosted.org/packages/1b/87/9949da319d500b17b0a0c1b427a41c401a8104b60f99e3e21dd8e1714fee/dsub-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8f717b12fe8d3f8957c1eb9302b4f1ff", "sha256": "5faf1a8e1ddabe4979aead0c0d6f542a8b5f58aac2b7e284b3f2666823bc02fe" }, "downloads": -1, "filename": "dsub-0.1.7-py2.7.egg", "has_sig": false, "md5_digest": "8f717b12fe8d3f8957c1eb9302b4f1ff", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 249534, "upload_time": "2018-04-19T18:02:16", "upload_time_iso_8601": "2018-04-19T18:02:16.783552Z", "url": "https://files.pythonhosted.org/packages/da/5e/09d0ccafcdb3d9852eeaeecf404a640c48647b3c1ea3afde55fd35bae9dc/dsub-0.1.7-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a79bb112f2d144785e676abc54d4b4dd", "sha256": "861ba360209bc3a2d33f379e2bf92a11daca04b8b2deb4a0b6a2c90fdf41fe0c" }, "downloads": -1, "filename": "dsub-0.1.7-py2-none-any.whl", "has_sig": false, "md5_digest": "a79bb112f2d144785e676abc54d4b4dd", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 123015, "upload_time": "2018-04-19T18:02:15", "upload_time_iso_8601": "2018-04-19T18:02:15.145940Z", "url": "https://files.pythonhosted.org/packages/2f/0c/b95f3f6c300437c64a37cb8d00d546d5e3db101a0b90d8d037d52019ec8e/dsub-0.1.7-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2ec55b56888edb6dd71cc7f97e0f5d61", "sha256": "ee9794a222f14ce3a641be66d8bfe68a28ed71417cc71fefc7d82eec8a2fab36" }, "downloads": -1, "filename": "dsub-0.1.7.tar.gz", "has_sig": false, "md5_digest": "2ec55b56888edb6dd71cc7f97e0f5d61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99574, "upload_time": "2018-04-19T18:02:18", "upload_time_iso_8601": "2018-04-19T18:02:18.475727Z", "url": "https://files.pythonhosted.org/packages/0b/e4/eb1980bf54e84364665cccca148ca1eec00dd4d67796d576863e63501962/dsub-0.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "a726e638cb9f1f7b879298817e6f1e61", "sha256": "9b91d6a0249a0f510d93ed2f67fa06395935ba61443af2c7d32d7a24406ac690" }, "downloads": -1, "filename": "dsub-0.1.8-py2-none-any.whl", "has_sig": false, "md5_digest": "a726e638cb9f1f7b879298817e6f1e61", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 137651, "upload_time": "2018-06-05T18:46:38", "upload_time_iso_8601": "2018-06-05T18:46:38.578202Z", "url": "https://files.pythonhosted.org/packages/25/b5/616b53a4963a3d36145d3184a72d7425bad8921867bc1cb39bfde1045b26/dsub-0.1.8-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c8d61e675e90a717df291ef2f076c235", "sha256": "2ae5ad60ecbff85b47dc8b6125ab04c06165e0d57f30cfb3cc58772bc91ec685" }, "downloads": -1, "filename": "dsub-0.1.8.tar.gz", "has_sig": false, "md5_digest": "c8d61e675e90a717df291ef2f076c235", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110825, "upload_time": "2018-06-05T18:46:40", "upload_time_iso_8601": "2018-06-05T18:46:40.099101Z", "url": "https://files.pythonhosted.org/packages/4d/4d/dd401746d6675fee3110205e0b976de8b1874ca6d0bc8fcb2444f8b9f414/dsub-0.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "20cef9b93eac557288b535ef61997092", "sha256": "bbad0fac8f9faae054333d4f7d4292c4f23a316fd2cc1f16dd99f878bcd0e638" }, "downloads": -1, "filename": "dsub-0.1.9-py2-none-any.whl", "has_sig": false, "md5_digest": "20cef9b93eac557288b535ef61997092", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 139874, "upload_time": "2018-06-28T17:10:09", "upload_time_iso_8601": "2018-06-28T17:10:09.771649Z", "url": "https://files.pythonhosted.org/packages/f4/e9/577bda75672f2a28473460cba8d931f463c80dd8073a389089775ae4e0b6/dsub-0.1.9-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cf023b7b641652aa5e3e744d6b5bb1c3", "sha256": "5a6202302517a7d772f2dcf0397df4774fb64f0a83d2bea301ae773f43886680" }, "downloads": -1, "filename": "dsub-0.1.9.tar.gz", "has_sig": false, "md5_digest": "cf023b7b641652aa5e3e744d6b5bb1c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 113977, "upload_time": "2018-06-28T17:10:11", "upload_time_iso_8601": "2018-06-28T17:10:11.299694Z", "url": "https://files.pythonhosted.org/packages/e2/b9/618b67e798c3a064a7fce7f0d73f405f8987369882893915ec0ea48456db/dsub-0.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "502a43168784796db8c8ccf98bdc39a1", "sha256": "df88d2f3868d93e7f75dd591de628ec0ac6eacded7d0ba78f88d513e5c54b530" }, "downloads": -1, "filename": "dsub-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "502a43168784796db8c8ccf98bdc39a1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 146412, "upload_time": "2018-09-20T23:34:44", "upload_time_iso_8601": "2018-09-20T23:34:44.971364Z", "url": "https://files.pythonhosted.org/packages/4a/ce/0ce842b887072d01d82d5e17c77e0347dcbd3035d140aa814bef23cc405f/dsub-0.2.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6b995d46be4d76b965c895b99d42c80c", "sha256": "9e1e91c10037e5818f52262590675d401c7916d86b411860abdaaff108a78f87" }, "downloads": -1, "filename": "dsub-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6b995d46be4d76b965c895b99d42c80c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 119600, "upload_time": "2018-09-20T23:34:46", "upload_time_iso_8601": "2018-09-20T23:34:46.689628Z", "url": "https://files.pythonhosted.org/packages/57/26/18f4409b33e402e38edea9f027c75f1803f7c78f4420192ee36f0e653a9c/dsub-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f46dad565ccd5404a68d18bcf4962022", "sha256": "2415bfaec72e9b8d3b21526f88db30539a232b7a661a167b518355c5b53540a3" }, "downloads": -1, "filename": "dsub-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "f46dad565ccd5404a68d18bcf4962022", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 152579, "upload_time": "2018-10-04T22:21:34", "upload_time_iso_8601": "2018-10-04T22:21:34.043726Z", "url": "https://files.pythonhosted.org/packages/d3/15/1f36b65edf6e7e836ba59333af4f5347b381d32368cfb27128728086eba1/dsub-0.2.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "80d25484e27ae2df0bf0a142dc513124", "sha256": "5db05dcb8e8601f553d83bb796ec66ac1141fe79584e2c6584b8188d9c7d5ce4" }, "downloads": -1, "filename": "dsub-0.2.1.tar.gz", "has_sig": false, "md5_digest": "80d25484e27ae2df0bf0a142dc513124", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122522, "upload_time": "2018-10-04T22:21:36", "upload_time_iso_8601": "2018-10-04T22:21:36.556854Z", "url": "https://files.pythonhosted.org/packages/89/21/0f667b3446b7c9032713358bcd71f81a509a4e98ecf6734340415b3497a4/dsub-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "3123c8394a2124ad0d705c08d15a03de", "sha256": "8e82c6aeafe86980a682bd8e6b713cb24c4f7f4964c0195daf3a5c51dd1b4f0e" }, "downloads": -1, "filename": "dsub-0.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "3123c8394a2124ad0d705c08d15a03de", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 153295, "upload_time": "2018-11-02T22:45:18", "upload_time_iso_8601": "2018-11-02T22:45:18.333262Z", "url": "https://files.pythonhosted.org/packages/67/e5/4676153f9e136043395c8bcbfe5be3a0d3a9f38269048ce1577cc0bae439/dsub-0.2.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2240d1c537b8a82f0458625416df5ede", "sha256": "08141bc892bd22ff4a529f549e7072b1c97690f8bbf5002eb6cc47d5e1c01f42" }, "downloads": -1, "filename": "dsub-0.2.2.tar.gz", "has_sig": false, "md5_digest": "2240d1c537b8a82f0458625416df5ede", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123182, "upload_time": "2018-11-02T22:45:20", "upload_time_iso_8601": "2018-11-02T22:45:20.108519Z", "url": "https://files.pythonhosted.org/packages/ae/7d/8f9724f4cbfc518f9855b6fee3250b69ee03659384dddb7e40c8c79e09bf/dsub-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "66c2b4fe48e4cb47ea237511e248d84a", "sha256": "d79ee9e7422fbb55566a413d99d886a915e11acca4bcd4cd6273622cd60b9209" }, "downloads": -1, "filename": "dsub-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "66c2b4fe48e4cb47ea237511e248d84a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 154830, "upload_time": "2018-11-20T22:58:36", "upload_time_iso_8601": "2018-11-20T22:58:36.292145Z", "url": "https://files.pythonhosted.org/packages/f3/97/04dfe83a7fd046e19fe8d8947d1929e1a2ec301555f47d01a0c5452575f1/dsub-0.2.3-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f4357927f5094556b5f1776c9dd58dc8", "sha256": "e941d68932748b2c18624f5ab0efa64d6bd067ddce9c1d1c16e00b4efad15dae" }, "downloads": -1, "filename": "dsub-0.2.3.tar.gz", "has_sig": false, "md5_digest": "f4357927f5094556b5f1776c9dd58dc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123953, "upload_time": "2018-11-20T22:58:38", "upload_time_iso_8601": "2018-11-20T22:58:38.501024Z", "url": "https://files.pythonhosted.org/packages/7a/26/92f99f78c25d70e696d5f340028f7d7f2b51374c81b08b97a5d200322535/dsub-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "067273fc5551f4827b0f5a2d726b81c4", "sha256": "aaf7eef0338f93f2624d9f863ef326b0791293c6b0595543edcaef0ea33aedc8" }, "downloads": -1, "filename": "dsub-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "067273fc5551f4827b0f5a2d726b81c4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 158476, "upload_time": "2018-12-11T21:23:36", "upload_time_iso_8601": "2018-12-11T21:23:36.807863Z", "url": "https://files.pythonhosted.org/packages/6f/ec/f5b83a1adf8688c0f03b09039b0bd601fec4298067e830f20509d7319275/dsub-0.2.4-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1378b1be0588242c37ecfaa954e1c94e", "sha256": "51c9d52a954db4e1aa1cf11b214a7fda5a6b2459f508ea33b97e8de21638c690" }, "downloads": -1, "filename": "dsub-0.2.4.tar.gz", "has_sig": false, "md5_digest": "1378b1be0588242c37ecfaa954e1c94e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 128388, "upload_time": "2018-12-11T21:23:39", "upload_time_iso_8601": "2018-12-11T21:23:39.072070Z", "url": "https://files.pythonhosted.org/packages/3d/80/5efd61f04c45092e24621fedd63f0d6231e6a7dd4b21afa6479eed9c9193/dsub-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "1a822f0fc3b5cea1e16928252578cc4e", "sha256": "ee8dd6e8842d98e63818275a34bd92bdca092cbb6f5ac87a254742d8a7f11bfe" }, "downloads": -1, "filename": "dsub-0.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "1a822f0fc3b5cea1e16928252578cc4e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 159354, "upload_time": "2019-02-07T22:40:05", "upload_time_iso_8601": "2019-02-07T22:40:05.445383Z", "url": "https://files.pythonhosted.org/packages/bd/51/9070f5301141737f5f7f1bbd78829d90cdd1b70dae51c1026890389de175/dsub-0.2.5-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b9a63d048ba029c582613ca81c592303", "sha256": "11597cceb10dd772ca43bf90a5855680d95277a3e1af095b2c1c4632bd26748e" }, "downloads": -1, "filename": "dsub-0.2.5.tar.gz", "has_sig": false, "md5_digest": "b9a63d048ba029c582613ca81c592303", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 129307, "upload_time": "2019-02-07T22:40:07", "upload_time_iso_8601": "2019-02-07T22:40:07.764647Z", "url": "https://files.pythonhosted.org/packages/63/09/9ef69102aeed70cd1537c09c5a9aebcb570d5dc84a1ce091376bb890dc28/dsub-0.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "a294186208603e23eabf52d477a0818f", "sha256": "f06bcce15b7b39c338f9e2763cc31e77aafc68af9103b98a08ba90fc456a367a" }, "downloads": -1, "filename": "dsub-0.2.6-py2-none-any.whl", "has_sig": false, "md5_digest": "a294186208603e23eabf52d477a0818f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 160021, "upload_time": "2019-04-01T21:59:28", "upload_time_iso_8601": "2019-04-01T21:59:28.838947Z", "url": "https://files.pythonhosted.org/packages/c5/44/28bf687b64755c1e2a68a61c4414f9ae6f46175fa4e563cdf2ea8d082f5e/dsub-0.2.6-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c283c321e4f79d5d7a8840901fbaf729", "sha256": "afb51cdcc72df2dd926b58e44f825dd4564346d396ef6162e0d561c1dee4f7f3" }, "downloads": -1, "filename": "dsub-0.2.6.tar.gz", "has_sig": false, "md5_digest": "c283c321e4f79d5d7a8840901fbaf729", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130037, "upload_time": "2019-04-01T21:59:30", "upload_time_iso_8601": "2019-04-01T21:59:30.405747Z", "url": "https://files.pythonhosted.org/packages/03/fc/bb5e5d65cecc79042d07af0b07cbca1f9e9db226b64b59e5186635fae06a/dsub-0.2.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "e8663ee41cadc917104a12731d026d77", "sha256": "a3c132de0eacf852c313e45b59876cb89e650715230e35094485e680aeb2c998" }, "downloads": -1, "filename": "dsub-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "e8663ee41cadc917104a12731d026d77", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 159995, "upload_time": "2019-04-03T18:51:54", "upload_time_iso_8601": "2019-04-03T18:51:54.331749Z", "url": "https://files.pythonhosted.org/packages/2a/6d/2c6ee43fb73c9602a48c749bc9f7189fdb6966b0ec15e161fff6d2fb6105/dsub-0.3.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "520d0e5843a60f401990cb8baf0c16cb", "sha256": "6a45b64b69e9f10d327920676de24d6d4adfd45a3f0f72c3ac3925468db51897" }, "downloads": -1, "filename": "dsub-0.3.0.tar.gz", "has_sig": false, "md5_digest": "520d0e5843a60f401990cb8baf0c16cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130027, "upload_time": "2019-04-03T18:51:56", "upload_time_iso_8601": "2019-04-03T18:51:56.261703Z", "url": "https://files.pythonhosted.org/packages/32/56/14e2a6fc1aa84aa2e602b19512f7c46066455d49a87206fe68a77cb5540f/dsub-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ef0b27659221c5bc698c506c1c06d640", "sha256": "4a92d82d21b262e98a9debbe8de2bcf3e1ef5683b7e54f6d73574e0f2bc43d0c" }, "downloads": -1, "filename": "dsub-0.3.1-py2-none-any.whl", "has_sig": false, "md5_digest": "ef0b27659221c5bc698c506c1c06d640", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 160466, "upload_time": "2019-04-16T19:49:44", "upload_time_iso_8601": "2019-04-16T19:49:44.838891Z", "url": "https://files.pythonhosted.org/packages/e2/27/7fd7b40bdb5df4a11ac32f46616f57786fb09fae459ae6407ebf0da2938b/dsub-0.3.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "884c0f7950248566738c54c8d7e7513c", "sha256": "2dc0d45d935ba150a6e473e663abe635f066a54e4f65a7170ee41806f779724d" }, "downloads": -1, "filename": "dsub-0.3.1.tar.gz", "has_sig": false, "md5_digest": "884c0f7950248566738c54c8d7e7513c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130570, "upload_time": "2019-04-16T19:49:46", "upload_time_iso_8601": "2019-04-16T19:49:46.664819Z", "url": "https://files.pythonhosted.org/packages/5f/60/4003c461b93cac04016fe0b288eeb2bc373884964e9b53d693b35c8a3c2f/dsub-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "bcd858a09623fccce7f21facbc712dae", "sha256": "fbc0f1bd55758bf2d2b5d7ccb3f708a3c3ed7d1588181f28a5bdfbaeefe06737" }, "downloads": -1, "filename": "dsub-0.3.10-py2-none-any.whl", "has_sig": false, "md5_digest": "bcd858a09623fccce7f21facbc712dae", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 164973, "upload_time": "2020-08-04T22:33:47", "upload_time_iso_8601": "2020-08-04T22:33:47.234568Z", "url": "https://files.pythonhosted.org/packages/c5/f4/0f1d968432c4257c46e14880d0c23510122dfdf744288e445b7f60bd9194/dsub-0.3.10-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a7291cb5ded5d610157c1681b88abd4f", "sha256": "aa975a8da26b67658f9db31c4beeba61c855cec7e0a77511681ef7625135fd9c" }, "downloads": -1, "filename": "dsub-0.3.10.tar.gz", "has_sig": false, "md5_digest": "a7291cb5ded5d610157c1681b88abd4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 141238, "upload_time": "2020-08-04T22:33:48", "upload_time_iso_8601": "2020-08-04T22:33:48.992415Z", "url": "https://files.pythonhosted.org/packages/b5/8c/587991e4a3670b2224e0d273307c40005de22a55285620a54bb9404de00d/dsub-0.3.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "99fe7a296798e4d05d4aba0c4f7595cc", "sha256": "8f27aa9ba4d2503faa6305a0d5f16555909ed05ad796d5cc5ef4980853d7c92e" }, "downloads": -1, "filename": "dsub-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "99fe7a296798e4d05d4aba0c4f7595cc", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 161478, "upload_time": "2019-06-13T02:07:07", "upload_time_iso_8601": "2019-06-13T02:07:07.498621Z", "url": "https://files.pythonhosted.org/packages/75/eb/d8b1bb7c07ff9542394ee6a8dcd022a29e2b1e923fb03116374fcd080241/dsub-0.3.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "090e4361eda194666b2a7dd9be028cb2", "sha256": "3ce04bfe0af0d549ce8d579cdfb48416d1316dc3bdc45141f718594acced4d1c" }, "downloads": -1, "filename": "dsub-0.3.2.tar.gz", "has_sig": false, "md5_digest": "090e4361eda194666b2a7dd9be028cb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 131434, "upload_time": "2019-06-13T02:07:09", "upload_time_iso_8601": "2019-06-13T02:07:09.287794Z", "url": "https://files.pythonhosted.org/packages/0a/6a/b385a2bd2dc2ba5142f69d4610eae27d8d302d3be77af934c0fb633744f2/dsub-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "3ab435c777775df49cbe5c0d13d48520", "sha256": "96f0cf0680ef016f73414e064e60daf77e93ca77f6f793dd1cba67473f5c2c7d" }, "downloads": -1, "filename": "dsub-0.3.3-py2-none-any.whl", "has_sig": false, "md5_digest": "3ab435c777775df49cbe5c0d13d48520", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 164340, "upload_time": "2019-09-03T22:14:53", "upload_time_iso_8601": "2019-09-03T22:14:53.887039Z", "url": "https://files.pythonhosted.org/packages/0b/db/e962d00a5a86f602fa9afb3fc40592f138cfc55d00e9d9a6abdc426a6346/dsub-0.3.3-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7111ae80dcdfaafd849dbe85a3c686af", "sha256": "6826d389b51add776b72b8922ad65d6df8e4d0e25c341302e0cec700611cd733" }, "downloads": -1, "filename": "dsub-0.3.3.tar.gz", "has_sig": false, "md5_digest": "7111ae80dcdfaafd849dbe85a3c686af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 133380, "upload_time": "2019-09-03T22:14:56", "upload_time_iso_8601": "2019-09-03T22:14:56.031999Z", "url": "https://files.pythonhosted.org/packages/23/83/d2884d18aeb579ca98d366563a312d653b1ac43a5f74e0f0ddd5a2d4b220/dsub-0.3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "7b553254df7522fd8ee21a348bc8dcf9", "sha256": "aac5484087b4e8192d569c192d1b1d73627197026a37bc356b5de83195201abe" }, "downloads": -1, "filename": "dsub-0.3.4-py2-none-any.whl", "has_sig": false, "md5_digest": "7b553254df7522fd8ee21a348bc8dcf9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 164453, "upload_time": "2019-10-01T21:00:06", "upload_time_iso_8601": "2019-10-01T21:00:06.759410Z", "url": "https://files.pythonhosted.org/packages/43/1a/e9e62579627819b52e3d15aaa0355d5543fe25c0d57195867529c03dbb2d/dsub-0.3.4-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b3087a1caf6b7e2fa65b68039fd36131", "sha256": "99f83d41978051429f3a50520dac9c7967e877731de0226b8f48f90f05a08e45" }, "downloads": -1, "filename": "dsub-0.3.4.tar.gz", "has_sig": false, "md5_digest": "b3087a1caf6b7e2fa65b68039fd36131", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 133854, "upload_time": "2019-10-01T21:00:09", "upload_time_iso_8601": "2019-10-01T21:00:09.052561Z", "url": "https://files.pythonhosted.org/packages/dd/98/f95482d4c02da9456af59fae0853612b8ccca73d7054598054d4270c40e7/dsub-0.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "46f111a8cc679dd0813418ab9dba1be5", "sha256": "13569831bb522c9958f2bc4e919c8b9d54b83351f3202033cefd5b5b7905cb3f" }, "downloads": -1, "filename": "dsub-0.3.5-py2-none-any.whl", "has_sig": false, "md5_digest": "46f111a8cc679dd0813418ab9dba1be5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 165715, "upload_time": "2019-10-24T16:45:24", "upload_time_iso_8601": "2019-10-24T16:45:24.289851Z", "url": "https://files.pythonhosted.org/packages/57/24/fa81d7008b92c8d61a1a11fc6308a04c73ab5d4175e6e14dbc639bc03f06/dsub-0.3.5-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e0175523f398197d39d4976ce8f7e10a", "sha256": "7d76d54bc6bdf1042a399080087a370b171b1819b2d777e58d5cf9fa9423b098" }, "downloads": -1, "filename": "dsub-0.3.5.tar.gz", "has_sig": false, "md5_digest": "e0175523f398197d39d4976ce8f7e10a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 134577, "upload_time": "2019-10-24T16:45:26", "upload_time_iso_8601": "2019-10-24T16:45:26.288249Z", "url": "https://files.pythonhosted.org/packages/a8/d1/f8f70777226114c72beefa7bef4811c03ae23e8501218f0d96ea216946c5/dsub-0.3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "3d6b32f21ef0946ffc7bde4cd5b136f3", "sha256": "4add4e6d8dc316e202142c1d77d4556434289ebe9e5de0b9bd59ececcbc33a53" }, "downloads": -1, "filename": "dsub-0.3.6-py2-none-any.whl", "has_sig": false, "md5_digest": "3d6b32f21ef0946ffc7bde4cd5b136f3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 174838, "upload_time": "2019-11-22T19:23:35", "upload_time_iso_8601": "2019-11-22T19:23:35.059149Z", "url": "https://files.pythonhosted.org/packages/83/a9/cb5afede93a26169feffaec0321191c49551304d05fe3ad3cc9399d4b898/dsub-0.3.6-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bc30a2959265914d9c4574edb92bd2c2", "sha256": "5f1f804da9b2b80475c889dab31a2d92d1ddc9ccce0a72be342f84de172098a2" }, "downloads": -1, "filename": "dsub-0.3.6.tar.gz", "has_sig": false, "md5_digest": "bc30a2959265914d9c4574edb92bd2c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 145623, "upload_time": "2019-11-22T19:23:37", "upload_time_iso_8601": "2019-11-22T19:23:37.190599Z", "url": "https://files.pythonhosted.org/packages/f2/6f/b74be517e06d3a5cd40425e66fcda1deaf4e0e6866970e5f0bddfb19b341/dsub-0.3.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "a546b4237d5fec9f8045c986ce03fb9a", "sha256": "a488f0fee92883447c6fd8a42cb7c927d933cb8db1f0ce0c45bc8452f4fc92dc" }, "downloads": -1, "filename": "dsub-0.3.7-py2-none-any.whl", "has_sig": false, "md5_digest": "a546b4237d5fec9f8045c986ce03fb9a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 178849, "upload_time": "2020-02-03T21:58:45", "upload_time_iso_8601": "2020-02-03T21:58:45.935154Z", "url": "https://files.pythonhosted.org/packages/ad/8b/38ff5d5275d23f0e1d595c75c4f91d5ff4244d7fe249cefdaea241410263/dsub-0.3.7-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5a71d077e87deb667a04ccfd95a422a6", "sha256": "c8a47c01f8a7a327d92d1a177f7a5f4eefbbf4b5f818bc1cd4bed6b84b46b976" }, "downloads": -1, "filename": "dsub-0.3.7.tar.gz", "has_sig": false, "md5_digest": "5a71d077e87deb667a04ccfd95a422a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 148332, "upload_time": "2020-02-03T21:58:47", "upload_time_iso_8601": "2020-02-03T21:58:47.592820Z", "url": "https://files.pythonhosted.org/packages/9d/d1/fd4b8d31dd3d8896813e844ffdffa149094dcb25449dbb8f27203b6833f7/dsub-0.3.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "ad8ba746ce7fadfdf353624aa23666dc", "sha256": "54eb3ab140bc0d2ac2513d428f6a24fdc2ac0aaa82a4239e25216f398b7627b6" }, "downloads": -1, "filename": "dsub-0.3.8-py2-none-any.whl", "has_sig": false, "md5_digest": "ad8ba746ce7fadfdf353624aa23666dc", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 165172, "upload_time": "2020-05-27T22:07:49", "upload_time_iso_8601": "2020-05-27T22:07:49.990764Z", "url": "https://files.pythonhosted.org/packages/ac/93/9e68b3ea0b4c40e527fcbd47b7e759735baa4a2807dc7b5177438c12006e/dsub-0.3.8-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "211ba96a59dc296ba65f5f23882e7d80", "sha256": "276bef3260140d9ca60d0543f77a486d37db5234a9d7fdc6d51c9d54670ba5f2" }, "downloads": -1, "filename": "dsub-0.3.8.tar.gz", "has_sig": false, "md5_digest": "211ba96a59dc296ba65f5f23882e7d80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 136145, "upload_time": "2020-05-27T22:07:51", "upload_time_iso_8601": "2020-05-27T22:07:51.600456Z", "url": "https://files.pythonhosted.org/packages/f8/b1/38f88c903fde36e6ad5eda0841ad4e8c8f7b3e0347e0506190fc9b3388ee/dsub-0.3.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "b934f084d2c0d2063d611f6bd1f902da", "sha256": "216ca4338355da32c2a163256ec726a07445a3cd05c6fc26f40755dbc1eeb13e" }, "downloads": -1, "filename": "dsub-0.3.9-py2-none-any.whl", "has_sig": false, "md5_digest": "b934f084d2c0d2063d611f6bd1f902da", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 163769, "upload_time": "2020-07-06T23:10:10", "upload_time_iso_8601": "2020-07-06T23:10:10.306629Z", "url": "https://files.pythonhosted.org/packages/a3/e4/2c1a82366aa1e403682b4fecfc060dd4d6f9fcb2d0c7df34125a01072557/dsub-0.3.9-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8c28bfeb4d7c4020a8f0f2fbf610a435", "sha256": "74557ffd02b61e73a40c82d8a024d3cb1086b77f018dde5dc147e4ba988a8230" }, "downloads": -1, "filename": "dsub-0.3.9.tar.gz", "has_sig": false, "md5_digest": "8c28bfeb4d7c4020a8f0f2fbf610a435", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 140161, "upload_time": "2020-07-06T23:10:12", "upload_time_iso_8601": "2020-07-06T23:10:12.049192Z", "url": "https://files.pythonhosted.org/packages/6a/4d/f6329dde75adba54647962cfdbd1be730fcb5e597aa0517ff74fef5446b1/dsub-0.3.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d9c471d98e4378b102ebdabd29f31071", "sha256": "6fc15925de4faf74e63a136bf185ca57df932a36983238a27f123c78410cc0c0" }, "downloads": -1, "filename": "dsub-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d9c471d98e4378b102ebdabd29f31071", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 165855, "upload_time": "2020-08-26T18:23:44", "upload_time_iso_8601": "2020-08-26T18:23:44.413238Z", "url": "https://files.pythonhosted.org/packages/f1/e3/78acb9b26b96311f75755eb2daf258343448c0e600e5aef5807812593282/dsub-0.4.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c9998eb2028bf8688d70fcdde347f4ef", "sha256": "4d9eb63d8842e38395317927cd4c916145344ce6b9d0e092dd6622e2173a8633" }, "downloads": -1, "filename": "dsub-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c9998eb2028bf8688d70fcdde347f4ef", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 142512, "upload_time": "2020-08-26T18:23:46", "upload_time_iso_8601": "2020-08-26T18:23:46.278702Z", "url": "https://files.pythonhosted.org/packages/76/ed/864717a8758c65b1566ca791602a41e919d09e3cdc8ba89f25b539209050/dsub-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "1830d8e64f4b7e1806b694a9c99372c6", "sha256": "053b9234c0b15f54ff662bfa414d7e3720f63d4e7414f49c3e55f7c4f504a2fb" }, "downloads": -1, "filename": "dsub-0.4.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1830d8e64f4b7e1806b694a9c99372c6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 165850, "upload_time": "2020-08-27T00:38:37", "upload_time_iso_8601": "2020-08-27T00:38:37.438256Z", "url": "https://files.pythonhosted.org/packages/6e/12/b5fec7d82d8c0b4e549ce8cc171f10aad441eb7e32e3bddbe0cdae469b31/dsub-0.4.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1a5507ceea238ba03cc5b7413040dfaa", "sha256": "2b875bd1c923aef42fe7fb444a6bfa9c8418c19b6ad789716d48e773e982bd1b" }, "downloads": -1, "filename": "dsub-0.4.1.tar.gz", "has_sig": false, "md5_digest": "1a5507ceea238ba03cc5b7413040dfaa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 142518, "upload_time": "2020-08-27T00:38:39", "upload_time_iso_8601": "2020-08-27T00:38:39.160338Z", "url": "https://files.pythonhosted.org/packages/f3/83/5e2fba8c02775397bc4d724cf71c64676a9ce240d37c3eab1a1da8934673/dsub-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "a0fa9677591eb4ed1e646954bab3259a", "sha256": "432d110d84ceff058397c4c610399c16b685639bab042dc6a94937a3ac4dba10" }, "downloads": -1, "filename": "dsub-0.4.2-py2-none-any.whl", "has_sig": false, "md5_digest": "a0fa9677591eb4ed1e646954bab3259a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6", "size": 168112, "upload_time": "2020-10-15T18:47:30", "upload_time_iso_8601": "2020-10-15T18:47:30.644205Z", "url": "https://files.pythonhosted.org/packages/ec/65/38f827b28358a0638a7505f27ea6e0078ac5eb21e2b0ba672a762b9f20f5/dsub-0.4.2-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f0913d71bb2b8a52f783949a76b4e36e", "sha256": "2162a9da786beea4dad1a0184edff81f75b3397135518afd813eee10fa3535a8" }, "downloads": -1, "filename": "dsub-0.4.2.tar.gz", "has_sig": false, "md5_digest": "f0913d71bb2b8a52f783949a76b4e36e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 146760, "upload_time": "2020-10-15T18:47:32", "upload_time_iso_8601": "2020-10-15T18:47:32.924674Z", "url": "https://files.pythonhosted.org/packages/02/b0/966dff6c0a55ee180e7efd6c5f7a4c74ec32b26dcb98d4ae668dad78d197/dsub-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "9559fea839f801d75963a518fa07499d", "sha256": "2da3a44d020724841414f56ab63296f884d267d379254bb3d4755927ff656867" }, "downloads": -1, "filename": "dsub-0.4.3-py2-none-any.whl", "has_sig": false, "md5_digest": "9559fea839f801d75963a518fa07499d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6", "size": 168151, "upload_time": "2020-11-24T00:40:08", "upload_time_iso_8601": "2020-11-24T00:40:08.216925Z", "url": "https://files.pythonhosted.org/packages/33/db/69b25156156b6cc922ea2b36c75cae62f43cf2599131f24064e0832b334d/dsub-0.4.3-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "407fb2c3a49bb86683fa94ba4e64ab8a", "sha256": "ec3a547b94c128df3e5b390a6e1ae8070ea678c71c26d7663d23b310b9c66f4c" }, "downloads": -1, "filename": "dsub-0.4.3.tar.gz", "has_sig": false, "md5_digest": "407fb2c3a49bb86683fa94ba4e64ab8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 147305, "upload_time": "2020-11-24T00:40:09", "upload_time_iso_8601": "2020-11-24T00:40:09.892529Z", "url": "https://files.pythonhosted.org/packages/16/c5/4f5239247d445cc3a0dc86c0633a6d4f01fdd5bfaee8c27f9ffda1f1b925/dsub-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "f4d40949ddfc675fc560d00b01d72486", "sha256": "cc6fd93ae65ca15f08eb94aa9e50f93ac2aa23282e4f3bf21a2fb0375840c131" }, "downloads": -1, "filename": "dsub-0.4.4-py2-none-any.whl", "has_sig": false, "md5_digest": "f4d40949ddfc675fc560d00b01d72486", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6", "size": 168713, "upload_time": "2021-02-18T21:58:37", "upload_time_iso_8601": "2021-02-18T21:58:37.249774Z", "url": "https://files.pythonhosted.org/packages/f3/df/c526d10c5fd2027efa28898856382fc18df984aeb6d5976cb2ac4b6aa0f6/dsub-0.4.4-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "265e437e8812f9fdde245f2d49c10a91", "sha256": "1c7bdf21b3c37eaa145e15c0b7976e3abac07f4dd7f614ac3c7b0519e5d8429b" }, "downloads": -1, "filename": "dsub-0.4.4.tar.gz", "has_sig": false, "md5_digest": "265e437e8812f9fdde245f2d49c10a91", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 148155, "upload_time": "2021-02-18T21:58:38", "upload_time_iso_8601": "2021-02-18T21:58:38.935324Z", "url": "https://files.pythonhosted.org/packages/c5/33/fd80440b592c6af2775f277bac6fff9dc9d01c4acc038955d1e3cc84741d/dsub-0.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "d5775f26a3ffcf161f59b97c70970d90", "sha256": "63007337dc40e815c04f9d723d3946bf9b4b7a99d67bad26f5ef8729889d4cf4" }, "downloads": -1, "filename": "dsub-0.4.5-py3-none-any.whl", "has_sig": false, "md5_digest": "d5775f26a3ffcf161f59b97c70970d90", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 168972, "upload_time": "2021-08-26T19:43:42", "upload_time_iso_8601": "2021-08-26T19:43:42.434047Z", "url": "https://files.pythonhosted.org/packages/05/f6/5688668747a75bd95ce7121361b245a421cd1601258b2ac0a1eacc5c6a5e/dsub-0.4.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "59d5e5f97883236fe12ab8fc1fed3824", "sha256": "df177cd55e8d35f18e8c5afafc339a29c12637b810eb284f5f31016eae5c2e50" }, "downloads": -1, "filename": "dsub-0.4.5.tar.gz", "has_sig": false, "md5_digest": "59d5e5f97883236fe12ab8fc1fed3824", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 148383, "upload_time": "2021-08-26T19:43:45", "upload_time_iso_8601": "2021-08-26T19:43:45.015023Z", "url": "https://files.pythonhosted.org/packages/09/2c/53a9ac971890b32c7726080df332937be075c013bb67dc76515949b94cf7/dsub-0.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "ed64a5a0cd9026dcc577cb4239e7ff06", "sha256": "7f7d95d372145c9612055e026055a4887d8dc2863c6078e430cfb561d5fcdbd7" }, "downloads": -1, "filename": "dsub-0.4.6-py3-none-any.whl", "has_sig": false, "md5_digest": "ed64a5a0cd9026dcc577cb4239e7ff06", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 169008, "upload_time": "2022-01-27T00:43:04", "upload_time_iso_8601": "2022-01-27T00:43:04.027373Z", "url": "https://files.pythonhosted.org/packages/e6/39/479530a5eb14d8e09b4f4bedc8ee2dd5bd36eda0e67eeb370703a8ed0c79/dsub-0.4.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2107bc3f5ab3ae4d0e08895ff13ef4de", "sha256": "d24070a9d5ffe191d6a6e25503057f83b21ffb9e4a41fecc10648bd564ecc5a9" }, "downloads": -1, "filename": "dsub-0.4.6.tar.gz", "has_sig": false, "md5_digest": "2107bc3f5ab3ae4d0e08895ff13ef4de", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 148486, "upload_time": "2022-01-27T00:43:06", "upload_time_iso_8601": "2022-01-27T00:43:06.007387Z", "url": "https://files.pythonhosted.org/packages/f9/fe/2f8de237560e60f5a7bdb2ab67c6752aef8313cfecf5364d960e50edc614/dsub-0.4.6.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ed64a5a0cd9026dcc577cb4239e7ff06", "sha256": "7f7d95d372145c9612055e026055a4887d8dc2863c6078e430cfb561d5fcdbd7" }, "downloads": -1, "filename": "dsub-0.4.6-py3-none-any.whl", "has_sig": false, "md5_digest": "ed64a5a0cd9026dcc577cb4239e7ff06", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 169008, "upload_time": "2022-01-27T00:43:04", "upload_time_iso_8601": "2022-01-27T00:43:04.027373Z", "url": "https://files.pythonhosted.org/packages/e6/39/479530a5eb14d8e09b4f4bedc8ee2dd5bd36eda0e67eeb370703a8ed0c79/dsub-0.4.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2107bc3f5ab3ae4d0e08895ff13ef4de", "sha256": "d24070a9d5ffe191d6a6e25503057f83b21ffb9e4a41fecc10648bd564ecc5a9" }, "downloads": -1, "filename": "dsub-0.4.6.tar.gz", "has_sig": false, "md5_digest": "2107bc3f5ab3ae4d0e08895ff13ef4de", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 148486, "upload_time": "2022-01-27T00:43:06", "upload_time_iso_8601": "2022-01-27T00:43:06.007387Z", "url": "https://files.pythonhosted.org/packages/f9/fe/2f8de237560e60f5a7bdb2ab67c6752aef8313cfecf5364d960e50edc614/dsub-0.4.6.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }