{ "info": { "author": "Gavin Hodge", "author_email": "gavin.hodge@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "PyLiquidPlanner\n===============\n\n[![Build Status](https://travis-ci.org/impulse-cloud/pyliquidplanner.svg?branch=master)](https://travis-ci.org/impulse-cloud/pyliquidplanner)\n\nPython wrapper for the Liquid Planner REST API.\n\nThe code is inspired by [PyXero](http://github.com/freakboy3742/pyxero), and aims to offer an ORM style of accessing the API.\n\n## Installation\n\nAt present, the library is not available in PyPI but can be installed from GitHub:\n\n```\npip install git+git://github.com/impulse-cloud/pyliquidplanner.git\n```\n\nAlternatively, if you don't have Git installed:\n\n```\npip install --upgrade https://github.com/impulse-cloud/pyliquidplanner/tarball/master\n```\n\n## Quickstart:\n\nIn addition to the instructions shown here, you will need to follow the [Liquid Planner API Guide](http://www.liquidplanner.com/assets/api/liquidplanner_API.pdf) and the [Types Documentation](https://app.liquidplanner.com/api/help/types) to see which fields are available.\n\nUse your Liquid Planner login to construct some credentials:\n\n```python\n>>> from liquidplanner.auth import BasicCredentials\n>>> credentials = BasicCredentials(, )\n```\n\nThen create an API instance:\n\n```python\n>>> from liquidplanner import LiquidPlanner\n>>> lp = LiquidPlanner(credentials)\n```\n\nYou can then access the various types of entities by name. For example, here is a list of all the projects in your workspace:\n\n```python\n>>> projects = lp.projects.all()\n>>> for p in projects:\n>>> print p['name']\n```\n\n## Workspaces\n\nWith the exception of `account` and `workspaces`, all other entities require a workspace to be specified. When instantiated, the API requests a list of available workspaces and defaults to the first returned. You can disable this check by passing the `use_first_workspace` argument.\n\n```python\n>>> lp = LiquidPlanner(credentials, use_first_workspace=False)\n```\n\nYou must then set the API's `workspace_id` manually.\n\n```python\n>>> workspaces = lp.workspaces.all()\n>>> lp.workspace_id = workspaces[1]['id']\n```\n\n## Using the API\n\nThe following entities are supported at present:\n\n* Account\n* Workspaces\n* Activities\n* Checklist Items\n* Clients\n* Comments\n* Custom Fields\n* Documents\n* Events\n* Folders\n* Links\n* Members\n* Milestones\n* Packages\n* Projects\n* Tags\n* Tasks\n* Teams\n* Timesheets\n* Tree Items\n* Webhooks\n\n### Reading\n\nThis library wraps the objects returned in a `dict` like object. This is done so that related\nitems can be accessed via the objects returned (see [Associated Objects](#associated-objects) below). Otherwise the data is returned as-is, except for dates which are converted into Python `datetime.datetime` objects. \n\nUse `all()` to get a full list of entities.\n\n```python\n>>> all_clients = lp.clients.all()\n```\nMost API options are supported, including:\n\n* `include` - fetch related entities too\n* `filters` - filter the list of items returned\n* `order` - sort order of results\n* `limit` - limit the number of objects returned\n\nUse `get()` to fetch a specific entity by id.\n\n```python\n>>> client = lp.clients.get(1234)\n```\n\nMost API options are supported, including:\n\n* `include` - fetch related entities too\n* `depth` - max depth when fetching tree items\n\n### Creating\n\nUse `create()` to insert a new entity. \n\nNote: The LiquidPlanner REST API requires the data to be wrapped with the single entity name. For example `{'client': {'name': 'My Client'}}`. This library takes care of the outer part, so you only need to worry about `{'name': 'My Client'}}`.\n\n```python\n>>> client = lp.clients.create({'name': 'My Client'})\n```\n\n### Updating\n\nUpdating records is similar to creating, but the record id must be supplied.\n\n```python\n>>> client = lp.clients.update(1234, {'name': 'New Client Name'})\n```\n\n### Associated Objects\n\nThe objects returned by `all()` and `get()` look and behave like Python `dict`s, but have a few properties available that allow access to associated objects. These properties have all the functionality of the main API endpoints.\n\nFor example, you can retrieve comments for a given task:\n\n```python\n>>> task = lp.tasks.get(1234)\n>>> comments = task.comments.all()\n```\n\nOr create a comment for a given task:\n\n```python\n>>> task = lp.tasks.get(1234)\n>>> comment = task.comments.create({\"description\": \"This is my comment\"})\n```\n\nUpdating and deleting works similarly.\n\nNote: This functionality is not available when you use the `include` parameter to make associated objects available for an `all()` or `get()` request. Only the outer object(s) have associated objects available.\n\n### Convenience Methods\n\nFor certain objects, the API supports various convenince methods. The wrapper does not attempt to filter the convenience methods to their applicable object types, it is up to the developer to use the Liquid Planner API Guide.\n\nSupported convenience methods:\n\n* Tree Items\n * Update Assignment\n * Reorder Assignments\n * Delete Assignment\n* Events, Projects, Tasks, etc.\n * Move Before / After\n* Tasks\n * Package Before / After\n * Track Time\n * Timer Start / Stop / Commit / Clear\n* Documents\n * Thumbnail\n * Download\n* Workspaces\n * Comment Stream\n * Upcoming Tasks\n * Changes\n\n## Future\n\nThis library is very new and still a work in progress. Some things I would like to support in future include:\n\n* Support for the 'convenience methods' (e.g. assignments, re-ordering)\n* Save and retrieve of attachments\n* More tests\n\n## Tests\n\nTo run the unit tests, run the following from the root directory of the project:\n\n```\n$ python setup.py test\n```\n\nThis is will install any test dependencies (Mock) into your environment and execute the unit tests.\n\n## Contributing\n\nContributions are most welcome by submitting a pull request. Please try to include test coverage of any new features or bug fixes.\n\nIf you have any problems with PyLiquidPlanner, you can [log an issue](http://github.com/impulse-cloud/pyliquidplanner/issues) on GitHub.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/gavinhodge/pyliquidplanner/tarball/0.0.2", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gavinhodge/pyliquidplanner", "keywords": "liquidplanner,liquid,planner,project,management", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "pyliquidplanner", "package_url": "https://pypi.org/project/pyliquidplanner/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pyliquidplanner/", "project_urls": { "Download": "https://github.com/gavinhodge/pyliquidplanner/tarball/0.0.2", "Homepage": "https://github.com/gavinhodge/pyliquidplanner" }, "release_url": "https://pypi.org/project/pyliquidplanner/0.0.2/", "requires_dist": null, "requires_python": null, "summary": "Python library for accessing the REST API of the Liquid Planner project management tool", "version": "0.0.2" }, "last_serial": 1692327, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "90372558e06e451cb936cc6e1b748a33", "sha256": "d2320ce86d1853de05b89e6e5d7e533c76a425fece67404c2aa7c674a8139f9f" }, "downloads": -1, "filename": "pyliquidplanner-0.0.1.tar.gz", "has_sig": false, "md5_digest": "90372558e06e451cb936cc6e1b748a33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8262, "upload_time": "2015-08-25T02:09:04", "url": "https://files.pythonhosted.org/packages/9e/06/4c5205db58448a7ac2fa8f280baf68418bef5abe89f647f67790aacb281e/pyliquidplanner-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "3b4e6b9004fb7691169f74fd46d0c29b", "sha256": "2083b58bcfcf7d10cbdb00a43cd9e65f821babb7fc88dd1d5049459f36d97609" }, "downloads": -1, "filename": "pyliquidplanner-0.0.2.tar.gz", "has_sig": false, "md5_digest": "3b4e6b9004fb7691169f74fd46d0c29b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8275, "upload_time": "2015-08-25T02:13:31", "url": "https://files.pythonhosted.org/packages/8f/b2/5da7da3e3b14f2f9b5505fda4c75f8d99f4b3d6b31108f5888e67fe2a863/pyliquidplanner-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3b4e6b9004fb7691169f74fd46d0c29b", "sha256": "2083b58bcfcf7d10cbdb00a43cd9e65f821babb7fc88dd1d5049459f36d97609" }, "downloads": -1, "filename": "pyliquidplanner-0.0.2.tar.gz", "has_sig": false, "md5_digest": "3b4e6b9004fb7691169f74fd46d0c29b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8275, "upload_time": "2015-08-25T02:13:31", "url": "https://files.pythonhosted.org/packages/8f/b2/5da7da3e3b14f2f9b5505fda4c75f8d99f4b3d6b31108f5888e67fe2a863/pyliquidplanner-0.0.2.tar.gz" } ] }