{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft", "Operating System :: POSIX", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: System :: Distributed Computing" ], "description": "===============\nAbout TaskGraph\n===============\n\n``TaskGraph`` is a library that was developed to help manage complicated\ncomputational software pipelines consisting of long running individual tasks.\nMany of these tasks could be executed in parallel, almost all of them wrote\nresults to disk, and many times results could be reused from part of the\npipeline. TaskGraph manages all of this for you. With it you can schedule\ntasks with dependencies, avoid recomputing results that have already been\ncomputed, and allot multiple CPU cores to execute tasks in parallel if\ndesired.\n\nTaskGraph Dependencies\n----------------------\n\nTask Graph is written in pure Python, but if the ``psutils`` package is\ninstalled the distributed multiprocessing processes will be ``nice``\\d.\n\nExample Use\n-----------\n\nInstall ``TaskGraph`` with\n\n``pip install taskgraph``\n\nThen\n\n.. code-block:: python\n\n def _create_list_on_disk(value, length, target_path):\n \"\"\"Create a numpy array on disk filled with value of `size`.\"\"\"\n target_list = [value] * length\n pickle.dump(target_list, open(target_path, 'wb'))\n\n\n def _sum_lists_from_disk(list_a_path, list_b_path, target_path):\n \"\"\"Read two lists, add them and save result.\"\"\"\n list_a = pickle.load(open(list_a_path, 'rb'))\n list_b = pickle.load(open(list_b_path, 'rb'))\n target_list = []\n for a, b in zip(list_a, list_b):\n target_list.append(a+b)\n pickle.dump(target_list, open(target_path, 'wb'))\n\n # create a taskgraph that uses 4 multiprocessing subprocesses when possible\n task_graph = taskgraph.TaskGraph(self.workspace_dir, 4)\n target_a_path = os.path.join(self.workspace_dir, 'a.dat')\n target_b_path = os.path.join(self.workspace_dir, 'b.dat')\n result_path = os.path.join(self.workspace_dir, 'result.dat')\n result_2_path = os.path.join(self.workspace_dir, 'result2.dat')\n value_a = 5\n value_b = 10\n list_len = 10\n task_a = task_graph.add_task(\n target=_create_list_on_disk,\n args=(value_a, list_len, target_a_path),\n target_path_list=[target_a_path])\n task_b = task_graph.add_task(\n target=_create_list_on_disk,\n args=(value_b, list_len, target_b_path),\n target_path_list=[target_b_path])\n sum_task = task_graph.add_task(\n target=_sum_lists_from_disk,\n args=(target_a_path, target_b_path, result_path),\n target_path_list=[result_path],\n dependent_task_list=[task_a, task_b])\n\n task_graph.close()\n task_graph.join()\n\n # expect that result is a list `list_len` long with `value_a+value_b` in it\n result = pickle.load(open(result_path, 'rb'))\n\nRunning Tests\n-------------\n\nTaskgraph includes a ``tox`` configuration for automating builds across\npython versions 2.7, 3.6, and whether ``psutil`` is installed. To execute all\ntests on all platforms, run:\n\n $ tox\n\nAlternatively, if you're only trying to run tests on a single configuration\n(say, python 3.5 without ``psutil``), you'd run::\n\n $ tox -e py36\n\nOr if you'd like to run the tests for the combination of Python 2.7 with\n``psutil``, you'd run::\n\n $ tox -e py27-psutil\n\n\n.. :changelog:\n\n=========================\nTaskGraph Release History\n=========================\n\n0.8.5 (2019-09-11)\n------------------\n* Dropped support for Python 2.7.\n* Fixed an issue where paths in ``ignore_paths`` were not getting ignored in\n the case of ``copy_duplicate_artifact=True``.\n* Fixed an issue where the \"percent completed\" in the logging monitor would\n sometimes exceed 100%. This occurred when a duplicate task was added to\n the TaskGraph object.\n* Fixed an issue where a relative path set as a target path would always cause\n TaskGraph to raise an exception after the task was complete.\n* Fixed an issue where kwargs that were unhashable were not considered when\n determining if a Task should be re-run.\n* Fixed an issue where files with almost identical modified times and sizes\n would hash equal in cases even when the filenames were different.\n\n0.8.4 (2019-05-23)\n------------------\n* Fixed an exception that occurred when two tasks were constructed that\n targeted the same file but one path was relative and the other was absolute.\n\n0.8.3 (2019-02-26)\n------------------\n* Fixed an issue that would cause TaskGraph to raise an IOError if an\n ``add_task`` call was marked for ``copy_duplicate_artifact`` but the\n base target file was missing.\n* Fixed an issue that would prevent the source distribution from\n installing.\n* Taskgraph is now tested against python versions 2.7, 3.6 and 3.7.\n\n0.8.2 (2019-01-31)\n------------------\n* Adjusted logging levels so most chatty information is lowered to debug and\n oddness in ``__del__`` shutdown are degraded from ``error`` to ``debug`` so\n as not to cause alarm.\n\n0.8.1 (2019-01-09)\n------------------\n* Fixed an issue that would cause a deadlock if two tasks were added that had\n the same function signature except different target paths.\n\n0.8.0 (2019-01-07)\n------------------\n* Fixed a race condition that would sometimes cause an exception when multiple\n threads attempted to read or write to the completed Task Database.\n* Fixed an issue that could cause an exception in ``__del__`` to print to\n stderr during Python interpreter shutdown.\n* Added a ``hash_algorithm`` parameter to ``add_task`` that is a string of\n either 'sizetimestamp' or anything in ``hashlib.algorithms_available``. This\n option tells TaskGraph how to fingerprint input and target files to\n determine the need for recomputation.\n* Added a ``copy_duplicate_artifact`` parameter to ``add_task`` that when True\n tells TaskGraph to copy duplicate target results to a new target so long as\n all the parameters and base/target files fingerprint to the same value.\n This can save significant computation time when use in scenarios where\n there are small changes in a workflow, but otherwise significant changes\n in filenames. This often occurs when putting timestamps or other suffixes\n on files that otherwise have identical content.\n\n0.7.2 (2018-11-21)\n------------------\n* TaskGraph now stores all task completion information in a single SQLite\n database stored in its cache directory. In previous versions\n TaskGraph would write a small text file for each task in a highly branching\n directory tree. This structure made removal of those directory trees\n computationally difficult.\n* Fixed an issue that would cause TaskGraph to reexecute if the target path\n was included in the argument list and that path was not normalized to the\n operating system's path style.\n* Fixed a deadlock in some cases where Tasks failed while other tasks checked\n for pre-execution clauses.\n\n0.7.0 (2018-10-22)\n------------------\n* Fixed an issue where very long strings might be interpreted as paths and\n Windows crashes because the path is too long.\n* Fixed a deadlock issue where a Task might raise an unhandled exception as a\n new task was added to the TaskGraph.\n* Fixed the occasional ``BrokenPipeError`` that could occur when a Task\n encountered an unhandled exception.\n* Added an ``n_retries`` parameter to ``add_task`` that lets TaskGraph attempt\n to reexecute a failing Task up to ``n_retries`` times before terminating\n the TaskGraph.\n* Removed the ``delayed_start`` option.\n\n0.6.1 (2018-08-14)\n------------------\n* Resolving an issue with duplicate logging being printed to stdout when\n ``n_workers > 0``. Logging is now only handled in the process that contains\n the TaskGraph instance.\n* Updated main logging message to indicate which tasks, by task name, are\n currently active and how many tasks are ready to execute but can't because\n there is not an open worker.\n* Attempted to fix an issue where processes in the process pool were not\n terminating on a Linux system by aggressively joining all threads and\n processes when possible.\n* Fixed an issue that would cause tasks that had been previously calculated to\n prematurely trigger children tasks even if the parent tasks of the current\n task needed to be reexecuted.\n\n0.6.0 (2018-07-24)\n------------------\n* Added a ``delayed_start`` flag to TaskGraph to allow for delayed execution\n of taskgraph tasks. If enabled on threaded or multiprocess mode, calls to\n ``add_task`` will not execute tasks until the ``join`` method is invoked on\n ``taskgraph``. This allows for finer control over execution order when tasks\n are passed non-equivalent ``priority`` levels.\n* Fixing an issue where a non-JSON serializeable object would cause\n ``add_task`` to crash. Now TaskGraph is more tolerant of non-JSON\n serializeable objects and will log warnings when parameters cannot be\n serialized.\n* TaskGraph constructor has an option to report a ongoing logging message\n at a set interval. The message reports how many tasks have been committed\n and completed.\n* Fixed a bug that would cause TaskGraph to needlessly reexecute a task if\n the only change was the order of the ``target_path_list`` or\n ``dependent_task_list`` variables.\n* Fixed a bug that would cause a task to reexecute between runs if input\n argument was a file that would be generated by a task that had not yet\n executed.\n* Made a code change that makes it very likely that tasks will be executed in\n priority order if added to a TaskGraph in delayed execution mode.\n* Refactored internal TaskGraph scheduling to fix a design error that made it\n likely tasks would be needlessly reexecuted. This also simplified TaskGraph\n flow control and cause slight performance improvements.\n* Fixed an issue discovered when a ``scipy.sparse`` matrix was passed as an\n argument and ``add_task`` crashed on infinite recursion. Type checking of\n arguments has been simplified and now iteration only occurs on the Python\n ``set``, ``dict``, ``list``, and ``tuple`` types.\n* Fixed an issue where the ``TaskGraph`` was not ``join``\\ing the worker\n process pool on a closed/join TaskGraph, or when the ``TaskGraph`` object\n was being deconstructed. This would occasionally cause a race condition\n where the TaskGraph may still have a cache ``.json`` file open. Discovered\n through a flaky build test.\n* Added functionality to the ``TaskGraph`` object to propagate log messages\n from workers back to the parent process. This only applies for cases where\n a ``TaskGraph`` instance is started with ``n_workers > 0``.\n* Fixed an issue where a function that was passed as an argument would cause\n a reexecution on a separate run because the ``__repr__`` of a function\n includes its pointer address.\n* Adjusted logging levels so that detailed task information is shown on DEBUG\n but basic status updates are shown in INFO.\n\n0.5.2 (2018-06-20)\n------------------\n* Fixing an issue where a Task would hang on a ``join`` if the number of\n workers in TaskGraph was -1 and a call to ``add_task`` has a non-``None``\n passed to ``target_path_list`` and the resulting task was ``\\.join``\\ed\n after a second run of the same program.\n\n0.5.1 (2018-06-20)\n------------------\n* Fixing an issue where TaskGraph would hang on a ``join`` if the number of\n workers was -1 and a call to ``add_task`` has ``None`` passed to\n ``target_path_list``.\n\n0.5.0 (2018-05-04)\n------------------\n* Taskgraph now supports python versions 2 and 3 (tested with python 2.7,\n 3.6).\n* Fixed an issue with ``taskgraph.TaskGraph`` that prevented a multiprocessed\n graph from executing on POSIX systems when ``psutil`` was installed.\n* Adding matrix-based test automation (python 2.7, python 3.6, with/without\n ``psutil``) via ``tox``.\n* Updating repository path to ``https://bitbucket.org/natcap/taskgraph``.\n\n0.4.0 (2018-04-18)\n------------------\n* Auto-versioning now happens via ``setuptools_scm``, replacing previous calls\n to ``natcap.versioner``.\n* Added an option to ``TaskGraph`` constructor to allow negative values in the\n ``n_workers`` argument to indicate that the entire object should run in the\n main thread. A value of 0 will indicate that no multiprocessing will be used\n but concurrency will be allowed for non-blocking ``add_task``.\n* Added an abstract class ``task.EncapsulatedTaskOp`` that can be used to\n instance a class that needs scope in order to be used as an operation passed\n to a process. The advantage of using ``EncapsulatedTaskOp`` is that the\n ``__name__`` hash used by ``TaskGraph`` to determine if a task is unique is\n calculated in the superclass and the subclass need only worry about\n implementation of ``__call__``.\n* Added a ``priority`` optional scalar argument to ``TaskGraph.add_task`` to\n indicates the priority preference of the task to be executed. A higher\n priority task whose dependencies are satisfied will executed before one with\n a lower priority.\n\n0.3.0 (2017-11-17)\n------------------\n* Refactor of core scheduler. Old scheduler used asynchronicity to attempt to\n test if a Task was complete, occasionally testing all Tasks in potential\n work queue per task completion. Scheduler now uses bookkeeping to keep track\n of all dependencies and submits tasks for work only when all dependencies\n are satisfied.\n* TaskGraph and Task ``.join`` methods now have a timeout parameter.\n Additionally ``join`` now also returns False if ``join`` terminates because\n of a timeout.\n* More robust error reporting and shutdown of TaskGraph if any tasks fail\n during execution using pure threading or multiprocessing.\n\n\n0.2.7 (2017-11-09)\n------------------\n* Fixed a critical error from the last hotfix that prevented ``taskgraph``\n from avoiding recomputation of already completed tasks.\n\n0.2.6 (2017-11-07)\n------------------\n* Fixed an issue from the previous hotfix that could cause ``taskgraph`` to\n exceed the number of available threads if enough tasks were added with long\n running dependencies.\n* Additional error checking and flow control ensures that a TaskGraph will\n catastrophically fail and report useful exception logging a task fails\n during runtime.\n* Fixed a deadlock issue where a failure on a subtask would occasionally cause\n a TaskGraph to hang.\n* ``Task.is_complete`` raises a RuntimeError if the task is complete but\n failed.\n* More efficient handling of topological progression of task execution to\n attempt to maximize total possible CPU load.\n* Fixing an issue from the last release that caused the test cases to fail.\n (Don't use 0.2.5 at all).\n\n0.2.5 (2017-10-11)\n------------------\n* Fixed a bug where tasks with satisfied dependencies or no dependencies were\n blocked on dependent tasks added to the task graph earlier in the main\n thread execution.\n* Indicating that ``psutil`` is an optional dependency through the ``setup``\n function.\n\n0.2.4 (2017-09-19)\n------------------\n* Empty release. Possible bug with PyPI release, so re-releasing with a\n bumped up version.\n\n0.2.3 (2017-09-18)\n------------------\n* More robust testing on a chain of tasks that might fail because an ancestor\n failed.\n\n0.2.2 (2017-08-15)\n------------------\n* Changed how TaskGraph determines of work is complete. Now records target\n paths in file token with modified time and file size. When checking if work\n is complete, the token is loaded and the target file stats are compared for\n each file.\n\n0.2.1 (2017-08-11)\n------------------\n* Handling cases where a function might be an object or something else that\n can't import source code.\n* Using natcap.versioner for versioning.\n\n0.2.0 (2017-07-31)\n------------------\n* Fixing an issue where ``types.StringType`` is not the same as\n ``types.StringTypes``.\n* Redefined ``target`` in ``add_task`` to ``func`` to avoid naming collision\n with ``target_path_list`` in the same function.\n\n0.1.1 (2017-07-31)\n------------------\n* Fixing a TYPO on ``__version__`` number scheme.\n* Importing ``psutil`` if it exists.\n\n0.1.0 (2017-07-29)\n------------------\n* Initial release.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/natcap/taskgraph", "keywords": "parallel multiprocessing distributed computing", "license": "BSD", "maintainer": "Rich Sharp", "maintainer_email": "richpsharp@gmail.com", "name": "taskgraph", "package_url": "https://pypi.org/project/taskgraph/", "platform": "", "project_url": "https://pypi.org/project/taskgraph/", "project_urls": { "Homepage": "https://bitbucket.org/natcap/taskgraph" }, "release_url": "https://pypi.org/project/taskgraph/0.8.5/", "requires_dist": [ "psutil ; extra == 'niced_processes'" ], "requires_python": "", "summary": "Parallel task graph framework.", "version": "0.8.5" }, "last_serial": 5815175, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ff7c2da57bf6f49ef4af7a1c0d8e1407", "sha256": "2498190fde1dcb35b286a2dd9cc0f95ceeb7b16b27d19e38b2d2721efb1b80e9" }, "downloads": -1, "filename": "taskgraph-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "ff7c2da57bf6f49ef4af7a1c0d8e1407", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7875, "upload_time": "2017-07-30T07:35:54", "url": "https://files.pythonhosted.org/packages/59/5a/b682693efb0193b01c6a5fd2544b9fff5b9f40fa74fdfdcac1907d121c1d/taskgraph-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9162d37ba4d23b45e8e5d5888aaa451d", "sha256": "0ad04392b5b1b6c24b96e1321b2d833f116b71c63bfe4302eb96c99674a63d28" }, "downloads": -1, "filename": "taskgraph-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9162d37ba4d23b45e8e5d5888aaa451d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5969, "upload_time": "2017-07-30T07:35:52", "url": "https://files.pythonhosted.org/packages/e6/88/1230de216395a73add2d0417786f02bfdb415103d207095dada4f78c38c9/taskgraph-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "fdeb59f4cbf66b7eccf30a1ef912a304", "sha256": "458194b6bd87d4dcf208d7ec30dca9ebe51268141b306b04634ddecfd1361564" }, "downloads": -1, "filename": "taskgraph-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "fdeb59f4cbf66b7eccf30a1ef912a304", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7896, "upload_time": "2017-07-31T17:40:19", "url": "https://files.pythonhosted.org/packages/99/ac/196ce8ed3c57c7d288bd47261531bea9f87f76fb986af4c4c1ff0faff719/taskgraph-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a781941aaa8519ce334da430afac5c5", "sha256": "a5e20eb1f26713f8c5662c52186dfc0feada77d653ef444a9609c5f6450808ce" }, "downloads": -1, "filename": "taskgraph-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7a781941aaa8519ce334da430afac5c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5964, "upload_time": "2017-07-31T17:40:18", "url": "https://files.pythonhosted.org/packages/44/a2/abe7c939351a9d877e283de6ac85e4dc8954a42e1724ab63dbc467fba0b2/taskgraph-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9d18665efe525121d85c39688f9d9c3b", "sha256": "740d1eef27d120a594eaead7f6f7003e76eb6b5055be17ae5e33a4094eb472db" }, "downloads": -1, "filename": "taskgraph-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "9d18665efe525121d85c39688f9d9c3b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7923, "upload_time": "2017-07-31T19:29:46", "url": "https://files.pythonhosted.org/packages/0c/5c/d67e61836cf9ae71cbd3259e7e6ce646460bccfd5c7601535afae845e8bb/taskgraph-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3486057a0f1b3e6369c24d518fb01b9a", "sha256": "b15ee1bb5fb208bdff89b2f880a27230f0655fad8fe88b45a0d7ae2a58ee290b" }, "downloads": -1, "filename": "taskgraph-0.1.2.tar.gz", "has_sig": false, "md5_digest": "3486057a0f1b3e6369c24d518fb01b9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5988, "upload_time": "2017-07-31T19:29:47", "url": "https://files.pythonhosted.org/packages/71/17/6fc36d26a04cbf6ac473f79ce4eab2e8d72e480735298fdb710b45efb32a/taskgraph-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "38d1507f3c9197a447dca96799b3e9b9", "sha256": "d9df1e544cd9451dd398e34136cc761d3000a836b1b27fdbff2e43e9c4d1ce91" }, "downloads": -1, "filename": "taskgraph-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "38d1507f3c9197a447dca96799b3e9b9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7928, "upload_time": "2017-08-03T22:17:05", "url": "https://files.pythonhosted.org/packages/db/9a/d6049b5ca3f89d8b47420ca1eaf0f524f667c75fa6aaf585d5af0cce73b5/taskgraph-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "740eca145f9c8aebb9312f60ade5bebd", "sha256": "448ab4e2bfe57c63270da46e4c65400c149cf5629399c52e1bb45bf604241f50" }, "downloads": -1, "filename": "taskgraph-0.2.0.tar.gz", "has_sig": false, "md5_digest": "740eca145f9c8aebb9312f60ade5bebd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5995, "upload_time": "2017-08-03T22:17:04", "url": "https://files.pythonhosted.org/packages/36/3f/9c736835d0d6245d5d3eee31b8aea0c948273c78987445a4032e7bd0c911/taskgraph-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "b2764c4d05160e9eea2f8d6e67c59cf4", "sha256": "292206f73ea32e4b1e711a035ea405574f881f5b1f73ce4b021fdeb9063c6894" }, "downloads": -1, "filename": "taskgraph-0.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "b2764c4d05160e9eea2f8d6e67c59cf4", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8327, "upload_time": "2017-08-16T16:40:49", "url": "https://files.pythonhosted.org/packages/46/83/d3d24d3dc2e8e2a89c7e62d079564355492adf9bbebeedc9bf4e2bed4a32/taskgraph-0.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88ddff390dba61e35b8849925879acf3", "sha256": "62ccb9725b7d49fe158d8d6a185c392b76e968a839b56786f55793b5c73d818e" }, "downloads": -1, "filename": "taskgraph-0.2.2.tar.gz", "has_sig": false, "md5_digest": "88ddff390dba61e35b8849925879acf3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6215, "upload_time": "2017-08-16T16:40:44", "url": "https://files.pythonhosted.org/packages/e6/3f/7502142460511a4dd59ac5c883b103116df09609c65cfb7ed9445db6156d/taskgraph-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "4a762233e8c165559a85cba86f09dbd2", "sha256": "e0fd283efff6ef92f5d4df11a99fdb59cdac8edb3bb762d4c09b6d85c7230e4c" }, "downloads": -1, "filename": "taskgraph-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "4a762233e8c165559a85cba86f09dbd2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8291, "upload_time": "2017-09-19T20:03:54", "url": "https://files.pythonhosted.org/packages/c3/f0/d7eae16edef7812f59b07afa45ee85fece2260aa25b18451e846ce7a29b2/taskgraph-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70d7e3410a768e85156f1e0f8196778f", "sha256": "44d1eec60ccc26e9c4276d6175c3e770428cb7c82877c0b329e12185de594bb4" }, "downloads": -1, "filename": "taskgraph-0.2.3.tar.gz", "has_sig": false, "md5_digest": "70d7e3410a768e85156f1e0f8196778f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6183, "upload_time": "2017-09-19T20:03:52", "url": "https://files.pythonhosted.org/packages/eb/ab/697adc305177b2f250482c2b15641a7205e7041abe84b474a61f915f8186/taskgraph-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "1143bee95c5ccc7d03e49c275a1ba6fe", "sha256": "4036f28d3b2831f6c03edc62093c4e0d48715ceb95b5fbca7e1bf3b03706c329" }, "downloads": -1, "filename": "taskgraph-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "1143bee95c5ccc7d03e49c275a1ba6fe", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8291, "upload_time": "2017-09-19T20:20:14", "url": "https://files.pythonhosted.org/packages/d3/2a/ef09488cbc53f9f6e042ac2b3c9d6ff1cc557bece2a07ad7121c1d6aad49/taskgraph-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46ac09eae093eda04e9eff9b2d44be52", "sha256": "47348c0eef53dd8ce815fe344b516677c26097658ac987cf8429892e4cf697f6" }, "downloads": -1, "filename": "taskgraph-0.2.4.tar.gz", "has_sig": false, "md5_digest": "46ac09eae093eda04e9eff9b2d44be52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6185, "upload_time": "2017-09-19T20:20:12", "url": "https://files.pythonhosted.org/packages/5d/24/f8c514ee7c75e2b73e4d7ba679fae374a5379dfc8434fc28371a4186e045/taskgraph-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "1632966016979a589d16ea9f18b7e254", "sha256": "4a73fe2944cb9aa97b558ae5c54c9fd3d76bf375a1cb1519e410c8df56a150a0" }, "downloads": -1, "filename": "taskgraph-0.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "1632966016979a589d16ea9f18b7e254", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8502, "upload_time": "2017-10-11T21:53:19", "url": "https://files.pythonhosted.org/packages/7c/99/de7ee715a853943d9135886b5246b11bb57f6acab0c6ab9546418e3c25ae/taskgraph-0.2.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebd31b8dde4c5e04c4c6afb94cea8b2d", "sha256": "24a4d4e1c4167a8dfd7a7db880f4e2d102eb6ef7521d9a702f6c4941858287b5" }, "downloads": -1, "filename": "taskgraph-0.2.5.tar.gz", "has_sig": false, "md5_digest": "ebd31b8dde4c5e04c4c6afb94cea8b2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6339, "upload_time": "2017-10-11T21:53:17", "url": "https://files.pythonhosted.org/packages/7c/05/48284e426c773f6cfcff21d3c03ea32f7772bdc74fc7a34af87ef94e2274/taskgraph-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "5e16fbd140527bf103801e966605d27f", "sha256": "75a08e21c5cd60753b90f70de98d189b9c42acb231a6ae9fcdd9f87375831ec7" }, "downloads": -1, "filename": "taskgraph-0.2.6-py2.7.egg", "has_sig": false, "md5_digest": "5e16fbd140527bf103801e966605d27f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 14980, "upload_time": "2017-11-09T21:12:46", "url": "https://files.pythonhosted.org/packages/06/46/d87d3bb5eb516bf4643c5de94eb1bf71a0375a0cb220fe1997152760156b/taskgraph-0.2.6-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "957ce7628ec674351fbe9ec70af93fb5", "sha256": "719a6ab3f1591a856a71b4a05d4bafe2e90472faf9c8e1a4ee410b6b5fc7686a" }, "downloads": -1, "filename": "taskgraph-0.2.6-py2-none-any.whl", "has_sig": false, "md5_digest": "957ce7628ec674351fbe9ec70af93fb5", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9636, "upload_time": "2017-11-09T21:12:50", "url": "https://files.pythonhosted.org/packages/27/9a/1ba89996443038a128bbe50964ba230a22391e6909e5d9395870c0b07f2e/taskgraph-0.2.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a238b2cbd666adec20422147bd2da6b1", "sha256": "d83bea68ec8abba57efa3f561e5078da764aa1bef181ed5ea5a727cd6920f1f0" }, "downloads": -1, "filename": "taskgraph-0.2.6.tar.gz", "has_sig": false, "md5_digest": "a238b2cbd666adec20422147bd2da6b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7932, "upload_time": "2017-11-09T21:12:48", "url": "https://files.pythonhosted.org/packages/a9/a1/1cdc379304300c648fd519e3fc5a5b60566a6b5eb9d05150455fe676cb39/taskgraph-0.2.6.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "99b205dfddd185d60bc87d43ec76dd20", "sha256": "b96e276ca330b7e1fde72c01130e0fa3483581403b4283b05226d4015598ae3f" }, "downloads": -1, "filename": "taskgraph-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "99b205dfddd185d60bc87d43ec76dd20", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11084, "upload_time": "2017-11-29T17:29:33", "url": "https://files.pythonhosted.org/packages/75/49/770928fac28bef241e4bd44a0908541b862bea91fa235f5d6d243a0b8330/taskgraph-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ca1dea53036699f1a1dd288c92fe5f4", "sha256": "310bea97e2b7f5b9c44e700b8835e75f13d69a7baec312de460234fdc625d49e" }, "downloads": -1, "filename": "taskgraph-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1ca1dea53036699f1a1dd288c92fe5f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9869, "upload_time": "2017-11-29T17:29:32", "url": "https://files.pythonhosted.org/packages/48/fe/c4743b998a08a6aae92582d6fd87d709b85f1d59bf79bebc5149ed2d5661/taskgraph-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8711c8e6ec0d14337377823d9bf8219d", "sha256": "f1ea25493ed09d78e2714070e3f13830825e9585653ac098b329b99d95155847" }, "downloads": -1, "filename": "taskgraph-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "8711c8e6ec0d14337377823d9bf8219d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11932, "upload_time": "2018-04-19T21:16:17", "url": "https://files.pythonhosted.org/packages/70/63/9563cbb0cfdbaf993f7be8ab16988c73425f6c13dfed031d59a3c7663b22/taskgraph-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed4f98c3299ac2c8481d5be78722b2a0", "sha256": "ea9be98a353717781c0421610956f35fefb40695d0344cf5b407490d4b0fea4a" }, "downloads": -1, "filename": "taskgraph-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ed4f98c3299ac2c8481d5be78722b2a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15679, "upload_time": "2018-04-19T21:16:19", "url": "https://files.pythonhosted.org/packages/04/cb/6717c6ebb7450dc4be853d4d8fbd330beb79cbabc8fb2ab61430d94588db/taskgraph-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "48c63ebda72551dd9f540a74938fe94e", "sha256": "7dc140ba9e15715acd9ff74d1c2ac80bf5f704991b4df69df561aedc0bdaecee" }, "downloads": -1, "filename": "taskgraph-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48c63ebda72551dd9f540a74938fe94e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13098, "upload_time": "2018-05-04T22:50:47", "url": "https://files.pythonhosted.org/packages/4e/61/82bca7f66aab34985789d1a3137be83fa6c957653e0bd9087cb2a97a68ac/taskgraph-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4c4dda39fb64d0e1b03b9acad9018e7", "sha256": "7c7004df39d6a4435b6949af3d94cfc8639e31d36fec64aff0f66c8c1dd86cfc" }, "downloads": -1, "filename": "taskgraph-0.5.0.tar.gz", "has_sig": false, "md5_digest": "e4c4dda39fb64d0e1b03b9acad9018e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17302, "upload_time": "2018-05-04T22:50:48", "url": "https://files.pythonhosted.org/packages/0f/8b/1710893b1d022392cb3fd656c0cadfa795e42a46a99900fe986478b9f738/taskgraph-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "7d9c5965212a75388ebb83302bdbfda9", "sha256": "ffb09a38f3b0df8fe9f0b3d256723c613f09c798c833dee243de469fb3c69c83" }, "downloads": -1, "filename": "taskgraph-0.5.1-py2-none-any.whl", "has_sig": false, "md5_digest": "7d9c5965212a75388ebb83302bdbfda9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13447, "upload_time": "2018-06-20T23:14:02", "url": "https://files.pythonhosted.org/packages/47/e6/1e509a906960cd346ca6820ab77aae82377c6f4172be15ed10ab9e09e941/taskgraph-0.5.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a76f7d62cc2075760f444457b0d50b26", "sha256": "3822b5b76eb31956059d2acb3c33788ead25193b73ea60ff024dec7d56a1a342" }, "downloads": -1, "filename": "taskgraph-0.5.1.tar.gz", "has_sig": false, "md5_digest": "a76f7d62cc2075760f444457b0d50b26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17654, "upload_time": "2018-06-20T23:14:01", "url": "https://files.pythonhosted.org/packages/60/33/5e41417a24a9650c57c83989f5920e25c534ac0df4b4845903a4f5d5bcef/taskgraph-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "d7273e139fe23da78aa29f0ad75c7ff9", "sha256": "01f2d46ee21f4bec41204259806123a63aa2381742cda20aaebd1f4366f01852" }, "downloads": -1, "filename": "taskgraph-0.5.2-py2-none-any.whl", "has_sig": false, "md5_digest": "d7273e139fe23da78aa29f0ad75c7ff9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13534, "upload_time": "2018-07-17T23:56:56", "url": "https://files.pythonhosted.org/packages/eb/a8/b299cde0c3f18c128c55a5d106c18d6396b8eb2d3cd5f587b21f78572a5b/taskgraph-0.5.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb90cb85bbd4b4197458b34f98743761", "sha256": "b260c8975038ed580d94cef7a863fe39ed0f6a8cb164fb1ed42fcb8691172ffb" }, "downloads": -1, "filename": "taskgraph-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fb90cb85bbd4b4197458b34f98743761", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11614, "upload_time": "2018-07-17T23:56:57", "url": "https://files.pythonhosted.org/packages/14/d6/f78a21e6d4cf0c9736993e4c7354a03f88dc538261caec4a4dc4601b1a2b/taskgraph-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1da38d7713527800e044474f8a039d28", "sha256": "678cc136f253d276ae62557e080eef907ec8017aa15eec18b54bfe9f7010eee7" }, "downloads": -1, "filename": "taskgraph-0.5.2.tar.gz", "has_sig": false, "md5_digest": "1da38d7713527800e044474f8a039d28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17964, "upload_time": "2018-07-17T23:56:58", "url": "https://files.pythonhosted.org/packages/8f/06/2f285219184296d2d7566856de02d0f98a5aacdd40fb1add6a5bdd3cc92a/taskgraph-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "12c23cc5e780e8a4e9e938b4f67bae14", "sha256": "c8b3dabd4ebb21f49a1e506e4b9273303c8dcb8f1194a98b49125fefee030ef6" }, "downloads": -1, "filename": "taskgraph-0.6.0-py2-none-any.whl", "has_sig": false, "md5_digest": "12c23cc5e780e8a4e9e938b4f67bae14", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 23899, "upload_time": "2018-07-24T21:30:03", "url": "https://files.pythonhosted.org/packages/d1/45/b4fd4afbd2c9725b07e5d2b71f895acce7ce458b067ed455bf4ad520008b/taskgraph-0.6.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7af3ec4139152e880a1f6c8807ac3801", "sha256": "b51de75d27857f65c2808008a136d7e890ad3d27caee94f0c9703d0cade75d5b" }, "downloads": -1, "filename": "taskgraph-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7af3ec4139152e880a1f6c8807ac3801", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18712, "upload_time": "2018-07-24T21:30:04", "url": "https://files.pythonhosted.org/packages/5d/d2/cad952cef67ae9bda9cc7cc1de4ae1f4e7726363f5c95e34d931bbb560d8/taskgraph-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a08d8d22dfe91fa1467e484a826d2e8b", "sha256": "d6c4b511615cc6d82a75cc3befca1533bc5da7897a02667c1b6a966451dde64b" }, "downloads": -1, "filename": "taskgraph-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a08d8d22dfe91fa1467e484a826d2e8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28062, "upload_time": "2018-07-24T21:30:05", "url": "https://files.pythonhosted.org/packages/bb/64/f95550609f392d3e3305156428bd6adea2bd88840dae0006af2e6e6f30cf/taskgraph-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "9761bc1dc3d1ca929c92a447a129ce10", "sha256": "4cf1d04f1777842f066b1d811fb2e8dd77f7fde4281bf614ae368e64fdb09ae2" }, "downloads": -1, "filename": "taskgraph-0.6.1-py2-none-any.whl", "has_sig": false, "md5_digest": "9761bc1dc3d1ca929c92a447a129ce10", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 25037, "upload_time": "2018-08-14T17:14:40", "url": "https://files.pythonhosted.org/packages/7c/06/b50936711154e226f4b383a806e0e24be464464d44b2c5b5142cbe1c1245/taskgraph-0.6.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c503a3656e1252948d9c82cb7df31466", "sha256": "7aa80361eac8f97c5e6bb6d5c66a832c4a4cb62ed920c7896a1bd6d493e90c0d" }, "downloads": -1, "filename": "taskgraph-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c503a3656e1252948d9c82cb7df31466", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19582, "upload_time": "2018-08-14T17:14:42", "url": "https://files.pythonhosted.org/packages/fc/c6/bbe40c3b7023a9fcfb6d35f8c147c806be8930697159d29429ac602bd150/taskgraph-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3dea66c7bd7635f0111fe3038743c55", "sha256": "3e6c4a11f4c55496392ccf2d2a5a4e1070d2eb6acf76b034a1bb4dcd124ae016" }, "downloads": -1, "filename": "taskgraph-0.6.1.tar.gz", "has_sig": false, "md5_digest": "f3dea66c7bd7635f0111fe3038743c55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29270, "upload_time": "2018-08-14T17:14:43", "url": "https://files.pythonhosted.org/packages/ae/2d/6469762e8a130c683a3ca1e506ed47e71e6e325e3b564b5616cc79c6192c/taskgraph-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "d1697214f57676d6aec8ed5dffb39afa", "sha256": "d53ffcf6867db4b0b6a7ccc71f2fd13dba394a77e52393e39d6f9d27a1e94e53" }, "downloads": -1, "filename": "taskgraph-0.7.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d1697214f57676d6aec8ed5dffb39afa", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 25987, "upload_time": "2018-10-22T20:51:27", "url": "https://files.pythonhosted.org/packages/59/35/349709c04c5c1c435efc016870cef26db5eb51f9eeb832b17070fc68ce5a/taskgraph-0.7.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe63a092de56e225e0e291b93a2cb3d1", "sha256": "2e0116111aae57413ba3bb6cfa2bbb56bb7706d5d7553e6b1fdb9b79c2ac5d13" }, "downloads": -1, "filename": "taskgraph-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fe63a092de56e225e0e291b93a2cb3d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20333, "upload_time": "2018-10-22T20:51:29", "url": "https://files.pythonhosted.org/packages/23/06/b41dd293704e1eefb14b4bbac62338f55e94ebcba72ba869ba05bff829b9/taskgraph-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b8b076be9b35cab6245e1b0b7e82ca96", "sha256": "de646e2507a123a63e067dc411631b93ba365a16c838cb69f09ec7c70959e661" }, "downloads": -1, "filename": "taskgraph-0.7.0.tar.gz", "has_sig": false, "md5_digest": "b8b076be9b35cab6245e1b0b7e82ca96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30553, "upload_time": "2018-10-22T20:51:30", "url": "https://files.pythonhosted.org/packages/57/0e/8874ddc18686e77fbf0a52f50c4791e97984345c30846e81171e5d9f622f/taskgraph-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "dae1a6752c5c98c69a5db30b8b63e19a", "sha256": "6ad85caaace7de10ce77dce1bf07b56ac62ce6c99a536a628b33f55d138264c5" }, "downloads": -1, "filename": "taskgraph-0.7.1-py2-none-any.whl", "has_sig": false, "md5_digest": "dae1a6752c5c98c69a5db30b8b63e19a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 21044, "upload_time": "2018-11-19T19:07:43", "url": "https://files.pythonhosted.org/packages/c8/c3/67c702e73599081e6b97e12db8a578e11b4a3a6d61cf14ee0ef54bbdfe1d/taskgraph-0.7.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b00e803f5cd775226995e1f8826cc3e", "sha256": "2f20baa44e1354b9ced960c906a302f890d312fb54d0f6dde6266b6322f54626" }, "downloads": -1, "filename": "taskgraph-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3b00e803f5cd775226995e1f8826cc3e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20989, "upload_time": "2018-11-19T19:07:45", "url": "https://files.pythonhosted.org/packages/34/5f/279e9c88e23962c0c6a3902febc7cc6d3906cf3510b7771c5f40a8d7e4dd/taskgraph-0.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1456f25ac00aadd2a253d0e4d9b290d5", "sha256": "413937c5e375db350bc06be689efd9abc5409ec7b5f2b3941a9f583d697037be" }, "downloads": -1, "filename": "taskgraph-0.7.1.tar.gz", "has_sig": false, "md5_digest": "1456f25ac00aadd2a253d0e4d9b290d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31742, "upload_time": "2018-11-19T19:07:46", "url": "https://files.pythonhosted.org/packages/f1/a1/9ca4db46a23eeb69655fa74dd584baa0604a313a8067b44e101f5929eee1/taskgraph-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "4c8c0b1e5b45f801cabebc1c6a1fcdf0", "sha256": "4c6816cafe73c907158952bcf1fbb88e1052db6e816ffcb8a31996b48f7af3db" }, "downloads": -1, "filename": "taskgraph-0.7.2-py2-none-any.whl", "has_sig": false, "md5_digest": "4c8c0b1e5b45f801cabebc1c6a1fcdf0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26595, "upload_time": "2018-11-21T23:22:02", "url": "https://files.pythonhosted.org/packages/6a/d6/cec644a51927c8980d5143e313d75d2676e661fa62c8094fcc8acbeb84ff/taskgraph-0.7.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34ed29ee2868c342babbde240662cfcd", "sha256": "e1dbd3feb881d991c3d27a81f44ccaaad009c62609795f9a7ce2d85164d4962f" }, "downloads": -1, "filename": "taskgraph-0.7.2-py3-none-any.whl", "has_sig": false, "md5_digest": "34ed29ee2868c342babbde240662cfcd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20709, "upload_time": "2018-11-21T23:22:04", "url": "https://files.pythonhosted.org/packages/2a/d0/bceb0bfc8c797765c419bebb93cdb54cc23d4a3139928738b107abe8d6d6/taskgraph-0.7.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22ff73abd93b1b6d54b63d6cd9b92c65", "sha256": "491a5d3e782404f6598b77de41c4a37d7d77f3e97c43af677acf5413d97bfef9" }, "downloads": -1, "filename": "taskgraph-0.7.2.tar.gz", "has_sig": false, "md5_digest": "22ff73abd93b1b6d54b63d6cd9b92c65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31692, "upload_time": "2018-11-21T23:22:05", "url": "https://files.pythonhosted.org/packages/99/c4/35895c13a46c3449125f317d1908ae84894109a6d6c7f0c956eb05bd63dc/taskgraph-0.7.2.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "48d8c87f50d582cdfe41caf8bfb65fc1", "sha256": "a8a2ccb97cedb4f06c02c721fad66f6e57ceb07162e7cd3a364f1f88c8c06770" }, "downloads": -1, "filename": "taskgraph-0.8.1-py2-none-any.whl", "has_sig": false, "md5_digest": "48d8c87f50d582cdfe41caf8bfb65fc1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 24068, "upload_time": "2019-01-10T01:03:53", "url": "https://files.pythonhosted.org/packages/1b/f2/49a6b797f85fab23b2c54c9db5670821d3199b67e1a8bbf07f1fa1966ab7/taskgraph-0.8.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cef6a995dc1c1a70e8918d39138a08c9", "sha256": "d1e7abbe9f0511ce21634fd25d746af187af778f3962c46625c1036fd7b6f98e" }, "downloads": -1, "filename": "taskgraph-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cef6a995dc1c1a70e8918d39138a08c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24019, "upload_time": "2019-01-10T01:03:54", "url": "https://files.pythonhosted.org/packages/5c/b1/bb0d26bbb416877e74012aa0ca8f037ed67633416de405b515cff6267176/taskgraph-0.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "203b85de5ee9dd22d77b98bf085f7544", "sha256": "076e4bb24a680c97e5d33d39d2e821d6a3819b610277f3bb178921893f9c078b" }, "downloads": -1, "filename": "taskgraph-0.8.1.tar.gz", "has_sig": false, "md5_digest": "203b85de5ee9dd22d77b98bf085f7544", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36643, "upload_time": "2019-01-10T01:03:56", "url": "https://files.pythonhosted.org/packages/3d/69/c633fed1817bc7bb2947aa70ae75eeed65109af30c33e5161f624cb725ce/taskgraph-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "919382033e724c9a13aa4aa668059ad7", "sha256": "3e9a7ecad891eb9c4272654c5d7c57ceee1f15125432cc68b1e342cdb309ac9d" }, "downloads": -1, "filename": "taskgraph-0.8.2-py2-none-any.whl", "has_sig": false, "md5_digest": "919382033e724c9a13aa4aa668059ad7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 24140, "upload_time": "2019-01-31T16:39:43", "url": "https://files.pythonhosted.org/packages/d8/14/9433fbc370e9b56912a6285ab0b179bf88c4464b01a8bcdbd9bfad4ed161/taskgraph-0.8.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4077f9fcb24430198000b58d48ae931", "sha256": "379f1d8448aa216459e47c83362a52270880a4d3824e12c71fe613d1951adc9a" }, "downloads": -1, "filename": "taskgraph-0.8.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a4077f9fcb24430198000b58d48ae931", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24086, "upload_time": "2019-01-31T16:39:46", "url": "https://files.pythonhosted.org/packages/a7/59/b79cc7d66f7301cd5590e626899d67fe01d43ae1b62af67abad42d957bc9/taskgraph-0.8.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "758a9db31db1f1a9acf58cc448a06a37", "sha256": "52d9f401576c3bda047f5938412d809a1b0d2678d2fbf1f1753f134622301e09" }, "downloads": -1, "filename": "taskgraph-0.8.2.tar.gz", "has_sig": false, "md5_digest": "758a9db31db1f1a9acf58cc448a06a37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36869, "upload_time": "2019-01-31T16:39:50", "url": "https://files.pythonhosted.org/packages/16/f1/1434e00c9f80a7e1a3f0fa294fe5b7f0d9366a0e0f02cde986978f8e8212/taskgraph-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "cbefcaeb8b9052bc4b106df525e53fa3", "sha256": "36974a0c006cc1d332fa45aa02902e35becdf76649697b6e657e6b90aa44ba7b" }, "downloads": -1, "filename": "taskgraph-0.8.3-py2-none-any.whl", "has_sig": false, "md5_digest": "cbefcaeb8b9052bc4b106df525e53fa3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 24278, "upload_time": "2019-02-28T21:39:44", "url": "https://files.pythonhosted.org/packages/22/44/c8a70e99cc502fe0e2f0ae9f2aa3532da956a1d60ca40e29efbf141ad99d/taskgraph-0.8.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3f01287a0164554a96baca431b8ea01", "sha256": "c8794fb292372f5d37a98381eaec1889e0d01fac4923a30ff4fc560baf20d2ad" }, "downloads": -1, "filename": "taskgraph-0.8.3-py3-none-any.whl", "has_sig": false, "md5_digest": "d3f01287a0164554a96baca431b8ea01", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24223, "upload_time": "2019-02-28T21:39:45", "url": "https://files.pythonhosted.org/packages/75/e8/a4919d65d6eaef99573cfef944d61fc1395a2af17956870d7267da53078c/taskgraph-0.8.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24d5eaf4ecb1be09a0a9101de2e07aa9", "sha256": "31162cbfdb61895ef3d03079e72a9709465e76f32886fe0471ab0865f58c41cd" }, "downloads": -1, "filename": "taskgraph-0.8.3.tar.gz", "has_sig": false, "md5_digest": "24d5eaf4ecb1be09a0a9101de2e07aa9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37680, "upload_time": "2019-02-28T21:39:47", "url": "https://files.pythonhosted.org/packages/5f/a9/11a41be16e0bcbaf18d0877204e2e45873d6633441127641f45a6728393c/taskgraph-0.8.3.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "16b9fb8d4c73fd799ccb85af8bd64ab8", "sha256": "2a2df9d291ebfea913f63fa47cca3b7a0752f73175de5a3a0beb7e5ae0666ad2" }, "downloads": -1, "filename": "taskgraph-0.8.5-py3-none-any.whl", "has_sig": false, "md5_digest": "16b9fb8d4c73fd799ccb85af8bd64ab8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24566, "upload_time": "2019-09-11T14:10:52", "url": "https://files.pythonhosted.org/packages/16/28/588b33f3455f05e190040dd08679a4622d7e0d3f51602132103159625c42/taskgraph-0.8.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "475ac53ad70a791a4dc8833b2549e7da", "sha256": "efa24ee2907b1d3ce4db3858cf27913b6dca8c096d5c26f51c65d17591a636b8" }, "downloads": -1, "filename": "taskgraph-0.8.5.tar.gz", "has_sig": false, "md5_digest": "475ac53ad70a791a4dc8833b2549e7da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39790, "upload_time": "2019-09-11T14:10:55", "url": "https://files.pythonhosted.org/packages/e3/21/801d8d0b36153658c653218b1fd2908f195b20d5eda4966b7917a0a80dd7/taskgraph-0.8.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "16b9fb8d4c73fd799ccb85af8bd64ab8", "sha256": "2a2df9d291ebfea913f63fa47cca3b7a0752f73175de5a3a0beb7e5ae0666ad2" }, "downloads": -1, "filename": "taskgraph-0.8.5-py3-none-any.whl", "has_sig": false, "md5_digest": "16b9fb8d4c73fd799ccb85af8bd64ab8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24566, "upload_time": "2019-09-11T14:10:52", "url": "https://files.pythonhosted.org/packages/16/28/588b33f3455f05e190040dd08679a4622d7e0d3f51602132103159625c42/taskgraph-0.8.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "475ac53ad70a791a4dc8833b2549e7da", "sha256": "efa24ee2907b1d3ce4db3858cf27913b6dca8c096d5c26f51c65d17591a636b8" }, "downloads": -1, "filename": "taskgraph-0.8.5.tar.gz", "has_sig": false, "md5_digest": "475ac53ad70a791a4dc8833b2549e7da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39790, "upload_time": "2019-09-11T14:10:55", "url": "https://files.pythonhosted.org/packages/e3/21/801d8d0b36153658c653218b1fd2908f195b20d5eda4966b7917a0a80dd7/taskgraph-0.8.5.tar.gz" } ] }