{ "info": { "author": "Andrew Poltavchenko", "author_email": "pa@yourserveradmin.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython" ], "description": "# toggl2pl\n\nPython module and tool to simplify time entries export from [Toggl][toggl]\ninto [PL][pl] (Project Laboratory).\n\n- [Requirements](#requirements)\n- [Usage](#usage)\n - [Installation](#installation)\n - [Production](#production)\n - [Precompiled binaries](#precompiled-binaries)\n - [Using PIP](#using-pip)\n - [Development](#development)\n - [Command line interface](#command-line-interface)\n - [Configuration](#configuration)\n - [Examples](#examples)\n - [Simple](#simple)\n - [Rounding](#rounding)\n - [Custom date](#custom-date)\n- [Functional](#functional)\n - [Core functional](#core-functional)\n - [Features](#features)\n- [Roadmap](#roadmap)\n- [Internals](#internals)\n - [Supported APIs](#supported-apis)\n - [Build application](#build-application)\n\n## Requirements\n\nThe module is written in pure Python and its work verified with Python `>= 3.5`.\n\nAs far as there are no low-level system calls (at least now) the module should\nbe platform independent, i.e. work on any platform where Python is available.\n\n_Python `2.7` (and older) support is not planned since Python `2.7` will not be\nmaintained past January 1, 2020._\n\n## Usage\n\n### Installation\n\n#### Production\n\n##### Precompiled binaries\n\nFor end users the preferable way to install application is to use executable files\nstatically compiled for Linux and Windows platforms, packaged using ZIP and signed\nwith GPG key.\n\nExample installation steps to execute on Linux:\n\n```bash\nexport TOGGL2PL_VERSION=\"1.0.4\"\n\nwget https://github.com/pa-yourserveradmin-com/toggl2pl/releases/download/v${TOGGL2PL_VERSION}/toggl2pl-${TOGGL2PL_VERSION}-linux-amd64.zip\nunzip toggl2pl-${TOGGL2PL_VERSION}-linux-amd64.zip\ninstall -v -D toggl2pl ~/.local/bin/toggl2pl\n\nrm -fv toggl2pl-${TOGGL2PL_VERSION}-linux-amd64.zip toggl2pl\n```\n\nVerify application work with your Linux distribution:\n\n```bash\ntoggl2pl --help\n```\n\n##### Using PIP\n\nIn case you need to install the application as a Python module (for example, you\nwant to use its API in your new awesome module or application), the simplest way\nis to use `pip`:\n\n```bash\npip install toggl2pl\n```\n\n#### Development\n\n1. Obtain the package sources and change working directory to the root of project.\nFor example, clone the project using Git:\n\n```bash\ngit clone https://github.com/pa-yourserveradmin-com/toggl2pl.git\ncd toggl2pl\n```\n\n2. The Python `virtualenv` module is recommended to start using the package in\ndevelopment mode, i.e. without module installation into the system. Please, see\n`virtualenv` package installation instructions for some common used operating\nsystems below.\n\nFedora 29:\n\n```bash\nsudo dnf --assumeyes install python-virtualenv python3-virtualenv\n```\n\nUbuntu 18:\n\n```bash\nsudo apt --assume-yes install python-virtualenv python3-virtualenv\n```\n\nOnce the `virtualenv` package is installed, just create a new Python virtual\nenvironment anywhere you want. The example below assumes virtual environment is\ndeployed into the root of the cloned project repository:\n\n```bash\nvirtualenv venv\nsource venv/bin/activate\npip install --requirement requirements.txt\n```\n\n3. In case if no issues with Python virtual environment setup, now you should be\nable to try using the module. In order to check environment, just execute the next\nCLI commands:\n\n```bash\ncp -av scripts/toggl2pl toggl2pl.py\n./toggl2pl.py --help\n```\n\nIn the output you will see usage instructions and some CLI arguments descriptions.\n\nIn order to interact with time trackers some additional configuration is needed,\nplease proceed with [Configuration](#configuration) paragraph to start using the\nmodule in command line mode.\n\n### Command line interface\n\n#### Configuration\n\nBy default CLI uses configuration file stored as `~/.toggl2pl/config.yml`. Please\nexecute the next commands to install [config.yml.example][config.yml.example] as\nthe default configuration file:\n\n```bash\ninstall -v -D docs/_static/config.yml.example ~/.toggl2pl/config.yml\n```\n\nPlease open the newly created configuration file with your preferable text editor,\nread comments and update empty fields with your personal information.\n\n[config.yml.example]: https://github.com/pa-yourserveradmin-com/toggl2pl/blob/master/docs/_static/config.yml.example\n\n#### Examples\n\nPlease note, that currently all CLI flags can be combined into the single command\nand examples below just needed to describe flags purposes.\n\n##### Simple\n\nIn order to post hours for the current day AS IS just call the script without\nany arguments:\n\n```bash\ntoggl2pl\n```\n\nIn the output you will see a table with list of projects, tasks and time (real\nand rounded) spent on each task. Also you will be prompted to export data to PL\nor interrupt export.\n\n##### Rounding\n\nBy default, the real number of minutes will be posted to PL. Use rounding or not\ndepends on your case and team agreement, so please keep this in mind.\n\nIn order to post rounded number of minutes - just append `--round` flag to the\nscript:\n\n```bash\ntoggl2pl --round\n```\n\nThe output will be the same, but after confirmation rounded number of time will\nbe posted to PL instead of real.\n\n_Note: The most actual information about the rounding base value can be found in\nthe CLI help output._\n\n##### Custom date\n\nIn case you need to export Toggl information from the past days, please use the\n`--date` flag with exact date in `YYYY-MM-DD` format:\n\n```bash\ntoggl2pl --date 2016-02-29\n```\n\nThis will export Toggl time entries dated `2016-02-29` to PL with the same day\nand cause **date change request**, so please be aware.\n\n## Functional\n\n### Core functional\n\nThe core (minimal) set of features required to start from something is:\n\n* [x] ability to synchronize Toggl clients and projects with PL database.\n* [x] ability to export records from Toggl to PL with a minimal human involvement.\n\n### Features\n\nThe list of features is not yet ready, but the next helpers already implemented:\n\n- all posts use about the same format (for sure, it is impossible to predict all\n possible cases, but at least common things can and already partially done).\n- posts time can be optionally rounded by using internally discussed rules.\n\n## Roadmap\n\nThere is a high-level implementation plan which may change with time depending\non external factors and ideas:\n\n* [x] create a minimal set of logic to implement the core functional.\n* [x] create command line interface to use already implemented logic.\n* [x] tune output format and information to make it useful and easy to understand.\n* [x] compile Python code to statically linked executable file to avoid dependency\non Python itself and its modules.\n* [x] automate build of Linux executable file to start distributing the tool in\nacceptable way.\n* [x] automate build of Windows executable file to provide an ability to use the\ntool on this platform.\n* [x] document existing code, CLI flags and configuration options with Sphinx.\n* [x] freeze existing functional and tweak code to resolve regressions and improve\nquality.\n* [ ] unit tests and coverage reports for existing minimal set of features.\n\nThe list above is incomplete, because there are too many ideas and features which\ncan be implemented, for example:\n\n- extend the list of [supported APIs](#supported-apis) by [Clockify][clockify]\nAPI in order to provide an alternative to [Toggl][toggl].\n- use, for example, Flask, move logic to centralized server and communicate with\nit by using HTTP API with a minimal set of required options. But, at the same time\nkeep ability to use the module in server-less mode and directly communicate with\nToggl and PL API.\n- use Elasticsearch with Kibana to store and visualize data passed through server\nto provide flexible reports and analytic mechanisms (for each user and for teams).\n\n## Internals\n\n### Supported APIs\n\nThe module is designed to work with time trackers over HTTP API, so in case of\nany questions, please refer to their official documentation in the first place:\n\n* [x] [Project Laboratory API Documentation][pl_api_docs]\n* [x] [Toggl API Documentation][toggl_api_docs]\n* [ ] [Clockify API Documentation][clockify_api_docs]\n\n_Note: work on Clockify API support is planned, but not started yet._\n\n### Build application\n\n__Please, make sure you completed with steps described in the [Development](#development)\nsection before continue with application build, since development environment is\nrequired option on this stage.__\n\nIn order to make the application easy distributable and simple to install, the\nproject code needs to be compiled into the single executable file with all its\ndependencies.\n\nWhile there is a number of tools which may create such kind of distributions,\nthis project uses [PyInstaller][pyinstaller] which does exactly what is needed\nalmost out of the box:\n\n```bash\npyinstaller --onefile scripts/toggl2pl\n```\n\nThe command above will collect all package dependencies and files into the single\nexecutable file which can be distributed to end users without additional actions\non their side (system / Python packages installation).\n\n[clockify]: https://clockify.me/\n[clockify_api_docs]: https://clockify.github.io/clockify_api_docs/\n[PyInstaller]: https://www.pyinstaller.org/\n[pl]: https://pl.itcraft.co/\n[pl_api_docs]: https://pl.itcraft.co/api/docs\n[toggl]: https://toggl.com/\n[toggl_api_docs]: https://github.com/toggl/toggl_api_docs/\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/pa-yourserveradmin-com/toggl2pl", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "toggl2pl", "package_url": "https://pypi.org/project/toggl2pl/", "platform": "", "project_url": "https://pypi.org/project/toggl2pl/", "project_urls": { "Homepage": "https://github.com/pa-yourserveradmin-com/toggl2pl" }, "release_url": "https://pypi.org/project/toggl2pl/1.0.4/", "requires_dist": [ "certifi (==2019.9.11)", "chardet (==3.0.4)", "Click (==7.0)", "elasticsearch (==7.0.4)", "Flask (==1.1.1)", "idna (==2.8)", "itsdangerous (==1.1.0)", "Jinja2 (==2.10.1)", "MarkupSafe (==1.1.1)", "Paste (==3.2.1)", "PyYAML (==5.1.2)", "requests (==2.22.0)", "six (==1.12.0)", "tabulate (==0.8.5)", "tqdm (==4.36.1)", "urllib3 (==1.25.6)", "waitress (==1.3.1)", "Werkzeug (==0.16.0)" ], "requires_python": "", "summary": "Python module and tool to simplify time entries export from Toggl into Project Laboratory", "version": "1.0.4" }, "last_serial": 5900580, "releases": { "1.0.3": [ { "comment_text": "", "digests": { "md5": "54ee008477955d0ca59c7de500aec953", "sha256": "3d2c86091928d7ae14ce3b2345cea971e810c3eb25e8159dbfefbe5fdaa05a63" }, "downloads": -1, "filename": "toggl2pl-1.0.3-py3-none-any.whl", "has_sig": true, "md5_digest": "54ee008477955d0ca59c7de500aec953", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16634, "upload_time": "2019-05-07T20:20:12", "url": "https://files.pythonhosted.org/packages/69/34/277535f76634b7b196f7973291424a05eb5036ed9a1fd73aed37c9d3beb4/toggl2pl-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6980400eed2ce5b8205218af515f06b3", "sha256": "133d758c40860107485dc4090c6386322bd466f180484b5660d769ad7da58ec3" }, "downloads": -1, "filename": "toggl2pl-1.0.3.tar.gz", "has_sig": true, "md5_digest": "6980400eed2ce5b8205218af515f06b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18314, "upload_time": "2019-05-07T20:20:15", "url": "https://files.pythonhosted.org/packages/ab/dc/6360c45852024a3fa0933be1fe5ea8a652f049c255b3048f636dbcb7f34f/toggl2pl-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "ce3928eb69c1985b1065b6862285251e", "sha256": "21677d75a48c791af7822903a4307934ba23a4ea1098901a308958ab41e75ab3" }, "downloads": -1, "filename": "toggl2pl-1.0.4-py3-none-any.whl", "has_sig": true, "md5_digest": "ce3928eb69c1985b1065b6862285251e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16634, "upload_time": "2019-09-28T20:36:38", "url": "https://files.pythonhosted.org/packages/10/42/c237a6df7179accade92954b18e0c8f2abe20bbc7ea6314fe0e7cbff6990/toggl2pl-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16e652ecc3f8109f164883297cb25501", "sha256": "7339731c08071d346701ac0a0f9697214345b6ddb12b2f87ef7ab14451b93c34" }, "downloads": -1, "filename": "toggl2pl-1.0.4.tar.gz", "has_sig": true, "md5_digest": "16e652ecc3f8109f164883297cb25501", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18333, "upload_time": "2019-09-28T20:36:42", "url": "https://files.pythonhosted.org/packages/42/0a/f6062f0d1a0f568b5270265abc95754a7178524af916ab8d593e776fa05f/toggl2pl-1.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ce3928eb69c1985b1065b6862285251e", "sha256": "21677d75a48c791af7822903a4307934ba23a4ea1098901a308958ab41e75ab3" }, "downloads": -1, "filename": "toggl2pl-1.0.4-py3-none-any.whl", "has_sig": true, "md5_digest": "ce3928eb69c1985b1065b6862285251e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16634, "upload_time": "2019-09-28T20:36:38", "url": "https://files.pythonhosted.org/packages/10/42/c237a6df7179accade92954b18e0c8f2abe20bbc7ea6314fe0e7cbff6990/toggl2pl-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16e652ecc3f8109f164883297cb25501", "sha256": "7339731c08071d346701ac0a0f9697214345b6ddb12b2f87ef7ab14451b93c34" }, "downloads": -1, "filename": "toggl2pl-1.0.4.tar.gz", "has_sig": true, "md5_digest": "16e652ecc3f8109f164883297cb25501", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18333, "upload_time": "2019-09-28T20:36:42", "url": "https://files.pythonhosted.org/packages/42/0a/f6062f0d1a0f568b5270265abc95754a7178524af916ab8d593e776fa05f/toggl2pl-1.0.4.tar.gz" } ] }