{ "info": { "author": "Chris Spencer", "author_email": "chrisspen@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6" ], "description": "CriticalPath\n============\n\n[![](https://img.shields.io/pypi/v/criticalpath.svg)](https://pypi.python.org/pypi/criticalpath) [![Build Status](https://img.shields.io/travis/chrisspen/criticalpath.svg?branch=master)](https://travis-ci.org/chrisspen/criticalpath)\n\nCalculates the\n[critical path](http://en.wikipedia.org/wiki/Critical_path_method)\nthrough a network of tasks.\n\nAssumes the given graph is acyclic (has no loops).\n\nA task network is composed of nodes, but it's also organized within\na parent node. This allows my node/task model to support recursive nesting\nof tasks. e.g. An overall \"project\" node containing multiple tasks can be\ntreated as a single task in itself, and therefore included in more abstract\ntask groupings.\n\nInstallation\n------------\n\n pip install criticalpath\n\nUsage\n-----\n\n >>> from criticalpath import Node\n >>> p = Node('project')\n >>> a = p.add(Node('A', duration=3))\n >>> b = p.add(Node('B', duration=3, lag=0))\n >>> c = p.add(Node('C', duration=4, lag=0))\n >>> d = p.add(Node('D', duration=6, lag=0))\n >>> e = p.add(Node('E', duration=5, lag=0))\n >>> p.link(a, b).link(a, c).link(a, d).link(b, e).link(c, e).link(d, e)\n project\n >>> p.update_all()\n >>> p.get_critical_path()\n [A, D, E]\n >>> p.duration\n 14\n\nDevelopment\n-----------\n\nTo run unittests across multiple Python versions, install:\n\n sudo add-apt-repository ppa:deadsnakes/ppa\n sudo apt-get update\n sudo apt-get install python-dev python3-dev python3.3-minimal python3.3-dev python3.4-minimal python3.4-dev python3.5-minimal python3.5-dev python3.6 python3.6-dev\n\nTo run all [tests](http://tox.readthedocs.org/en/latest/):\n\n export TESTNAME=; tox\n\nTo run tests for a specific environment (e.g. Python 2.7):\n \n export TESTNAME=; tox -e py27", "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/chrisspen/criticalpath", "keywords": "", "license": "LGPL", "maintainer": "", "maintainer_email": "", "name": "criticalpath", "package_url": "https://pypi.org/project/criticalpath/", "platform": "", "project_url": "https://pypi.org/project/criticalpath/", "project_urls": { "Homepage": "https://github.com/chrisspen/criticalpath" }, "release_url": "https://pypi.org/project/criticalpath/0.1.5/", "requires_dist": null, "requires_python": "", "summary": "Calculates the critical path in a task network.", "version": "0.1.5" }, "last_serial": 4019981, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6544e1c8dea2eabb451cf3bec51c8bf3", "sha256": "6241d228b37baabe1e3f6427716e3484b91338a8dc3a5931676b51814396e916" }, "downloads": -1, "filename": "criticalpath-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6544e1c8dea2eabb451cf3bec51c8bf3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4011, "upload_time": "2014-03-08T04:58:03", "url": "https://files.pythonhosted.org/packages/97/eb/a5767b6d1ba7cefb009609226cfba72863dbbe2622bcc8c1135a2a26f42b/criticalpath-0.1.0.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0df2b6ce932d4a1d17abb98ab2f54cd7", "sha256": "bcab298af57022db010a5da9e52477d8f3993bffb1ebc83204c649469c44d887" }, "downloads": -1, "filename": "criticalpath-0.1.3.tar.gz", "has_sig": false, "md5_digest": "0df2b6ce932d4a1d17abb98ab2f54cd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9302, "upload_time": "2018-07-01T09:56:37", "url": "https://files.pythonhosted.org/packages/0a/74/d9e121d09b80e6d2b868251873e13a3d34ae49eb84e37cbac149b423d74c/criticalpath-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "46a7ef54cf3887fe4b183724512148a4", "sha256": "b082d73e5408fd47388135785738abcd072ac26deba8ad28be854248beb59bf6" }, "downloads": -1, "filename": "criticalpath-0.1.4.tar.gz", "has_sig": false, "md5_digest": "46a7ef54cf3887fe4b183724512148a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10863, "upload_time": "2018-07-01T10:51:21", "url": "https://files.pythonhosted.org/packages/f8/d3/147313c00544636c24d820d19db9cd976e4675a7931e444cc0b75da24193/criticalpath-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "6e407555a6c19c5babb945106f591bd8", "sha256": "b140415d3b3d355af8cb3875ab89b1e155a98afe86c374bcdf045fa19d36fa0d" }, "downloads": -1, "filename": "criticalpath-0.1.5.tar.gz", "has_sig": false, "md5_digest": "6e407555a6c19c5babb945106f591bd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10844, "upload_time": "2018-07-01T10:58:17", "url": "https://files.pythonhosted.org/packages/f0/b3/4a0151bffc3315f414c483dce6313b8473a2d0221a359a4d80d48fa78cba/criticalpath-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6e407555a6c19c5babb945106f591bd8", "sha256": "b140415d3b3d355af8cb3875ab89b1e155a98afe86c374bcdf045fa19d36fa0d" }, "downloads": -1, "filename": "criticalpath-0.1.5.tar.gz", "has_sig": false, "md5_digest": "6e407555a6c19c5babb945106f591bd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10844, "upload_time": "2018-07-01T10:58:17", "url": "https://files.pythonhosted.org/packages/f0/b3/4a0151bffc3315f414c483dce6313b8473a2d0221a359a4d80d48fa78cba/criticalpath-0.1.5.tar.gz" } ] }