{ "info": { "author": "Sumner Evans", "author_email": "sumner.evans98@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: POSIX", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "tracktime\n=========\n\ntracktime is a filesystem-backed time tracking solution. It uses a sane\ndirectory structure to organize CSV files that store time tracking data for each\nday.\n\nFeatures\n--------\n\n- CLI\n- Start/stop/resume time entries\n- List/edit time entries for a given day\n- Generate rST, PDF, HTML reports for a month (optionally restricted to a\n particular customer)\n- Synchronise time spent to GitLab using the Time Tracking API\n\nInstallation\n------------\n\nUsing PyPi::\n\n pip install --user tracktime\n\nOn Arch Linux, you can install the ``tracktime`` package from the AUR. For\nexample, if you use ``yay``::\n\n yay -S tracktime\n\nDependencies\n^^^^^^^^^^^^\n\nReport functionality requires ``wkhtmltopdf`` to be installed. If you install\nusing the AUR package, this will be installed automatically. Otherwise, you can\ninstall it using your distribution's package manager or visit their `homepage`__\nfor installation instructions specific to your operating system.\n\nAdditionally, you will need to ensure that the ``wkhtmltopdf`` executable is in\nyour ``$PATH``.\n\n__ https://wkhtmltopdf.org/\n\nGuiding Principles\n------------------\n\n- Filesystem based (want to be able to use Git to keep track of my time entries)\n- Easy to edit manually (not a binary format)\n- Must be able to use offline\n\nConfiguration Options\n---------------------\n\nThere are a number of configuration options that can be set in\n``~/.config/tracktime/tracktimerc``. The ``tracktimerc`` file is in YAML format.\nHere is a link to an `example configuration`_. Below is a list of each of the\noptions and what they do.\n\n- ``fullname`` (``string``) - your full name. This is used for generating\n reports.\n- ``sync_time`` (``boolean``, defaults to ``false``) - determines whether or not\n to synchronise with external services.\n- ``editor`` (``string``) - specifies the editor to use when ``tt edit`` is run.\n If this value is not present, the ``EDITOR`` and ``VISUAL`` environment\n variables are used as fallback. If none are present, then ``vim`` (on\n non-Windows OSes) or ``notepad`` (on Windows) is used.\n- ``gitlab`` (``dictionary``) - configuration of GitLab parameters\n\n - ``api_root`` (``string``, defaults to ``'https://gitlab.com/api/v4/'``) -\n the GitLab API root to use.\n - ``api_key`` (``string``) - can be either your GitLab API Key in plain text\n or a shell command which returns the API key. This second option can be\n useful if you want to store your API key in a password manager. To indicate\n that it is a shell command, append a vertical bar (``|``) at the end of the\n command.\n\n .. note::\n\n You can create an API key here:\n https://gitlab.com/profile/personal_access_tokens. The API Key must be\n created with full API access. Used to sync with GitLab.\n\n- ``tableformat`` (``string``, defaults to ``simple``) - the type of table to\n generate when exporting a report to stdout. (See the `tabulate documentation`_\n for details on what formats are supported.)\n- ``project_rates`` (``dictionary``) - a dictionary of project-rate pairs. Used\n to calculate totals for the report export.\n- ``customer_aliases`` (``dictionary``) - a dictionary of alias-full name\n pairs. Used to expand a name on the report export. Useful when a customer has\n a really long name.\n- ``customer_addresses`` (``dictionary``) - a dictionary of name-address\n pairs. Used in the report export.\n\n.. _example configuration: https://gitlab.com/sumner/tracktime/snippets/1731133\n.. _tabulate documentation: https://bitbucket.org/astanin/python-tabulate#rst-header-table-format\n\nArchitecture\n------------\n\nDirectory Structure\n^^^^^^^^^^^^^^^^^^^\n\n::\n\n /\n |-> 2017\n | |-> 01\n | | |-> .synced\n | | |-> 01\n | | |-> 02\n | | |-> ...\n | |-> 02\n | |-> ...\n |-> 2018\n\nIn other words, the generic path is ``YEAR/MONTH/DAY`` where all three fields\nare the numeric, zero-padded.\n\nEach day with time tracked will have a corresponding file and have the file\nformat as described below.\n\nThe ``.synced`` file in each month's directory stores the amount of time that\nhas been reported to the external services.\n\nTime Tracking File Format\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAll time tracking files will be CSVs with the following fields:\n\n- ``start`` - the start time for the time entry\n- ``stop`` - the stop time for the time entry\n- ``project`` - the project for the time entry\n- ``type`` - the type of entry (gitlab, github, or none)\n- ``taskid`` - the task ID (issue/PR/MR/story number)\n- ``customer`` - the customer the entry is for\n- ``notes`` - any notes about the time entry\n\nThe ``start`` and ``stop`` fields will be times, formatted in ``HH:MM`` where\n``HH`` is 24-hour time. All other fields are text fields that can hold arbitrary\ndata.\n\nSynced Time File Format\n^^^^^^^^^^^^^^^^^^^^^^^\n\nAll ``.synced`` files will be CSVs with the following fields:\n\n- ``type`` - the type of taskid (gitlab, github, or none)\n- ``project`` - the project that the taskid is associated with\n- ``taskid`` - the task ID (issue/PR/MR/story number)\n- ``synced`` - the amount of time that has been successfully pushed to the\n external service for this taskid\n\nSynchronising to External Services\n----------------------------------\n\ntracktime can sync tracked time with external services. It does this by keeping\ntrack of how much time it has been reported to the external service using the\n``.synced`` file in each month's directory. Then, it pushes changes to the\nexternal service.\n\n**This is not a two-way sync! tracktime only pushes changes, it does not poll\nfor changes to the external services.**\n\nSupported External Services\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n- GitLab\n\nUnsupported Edge Cases\n----------------------\n\n- Daylight savings time (if you are needing to track time at 02:00 in the\n morning, I pitty you).\n- Time entries that span multiple days (if you are working that late, create two\n entries).\n- Timezones (only switch timezones between days, if you have to switch, just\n make sure that you keep the timezone consistent for a given day).", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/sumner/tracktime", "keywords": "time tracking", "license": "GPL3", "maintainer": "", "maintainer_email": "", "name": "tracktime", "package_url": "https://pypi.org/project/tracktime/", "platform": "", "project_url": "https://pypi.org/project/tracktime/", "project_urls": { "Homepage": "https://gitlab.com/sumner/tracktime" }, "release_url": "https://pypi.org/project/tracktime/0.9.9/", "requires_dist": null, "requires_python": "", "summary": "Time tracking library with command line interface.", "version": "0.9.9" }, "last_serial": 5952200, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "65899a4da3732d8f8741c2c51ec39f3f", "sha256": "fc7544ab2a8a3e59727e85350074210d1e736b34bd5c0474f84bfb93cc314855" }, "downloads": -1, "filename": "tracktime-0.1.1.tar.gz", "has_sig": false, "md5_digest": "65899a4da3732d8f8741c2c51ec39f3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10684, "upload_time": "2018-07-08T04:05:54", "url": "https://files.pythonhosted.org/packages/e2/c7/3aa07341738e59038d589744823d7e2c069ac778ce334338bcb79444db0f/tracktime-0.1.1.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "6725193bf48cab471109859a8cedd18f", "sha256": "916641046ab739933706bbd4452c1796378b95ea419d58fd7adf891898742e56" }, "downloads": -1, "filename": "tracktime-0.9.0.tar.gz", "has_sig": false, "md5_digest": "6725193bf48cab471109859a8cedd18f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10886, "upload_time": "2018-07-08T05:04:18", "url": "https://files.pythonhosted.org/packages/7a/08/c49f2bf09f97112b5c62064da6d858b5c12274ad93e5ec1fd8f51d0fd89f/tracktime-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "0c01d0fd2f4b176375f01503a77e4fe1", "sha256": "f3c4f2ccfe5936bf1da014278569e4dad524de8416eb09b74783079a5102c94e" }, "downloads": -1, "filename": "tracktime-0.9.1.tar.gz", "has_sig": false, "md5_digest": "0c01d0fd2f4b176375f01503a77e4fe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10682, "upload_time": "2018-07-14T04:05:27", "url": "https://files.pythonhosted.org/packages/28/97/9dd48991c7f66260493f45b06e0c9da5b584feb47e6a4460991af3ba8caa/tracktime-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "4a33f83ea2cec10c0c2b3d223414ad29", "sha256": "ff0d4d2a4661c6916f3d0f41dbb8dd3a7121b0b4cba0e87100e51c46e271213a" }, "downloads": -1, "filename": "tracktime-0.9.2.tar.gz", "has_sig": false, "md5_digest": "4a33f83ea2cec10c0c2b3d223414ad29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10659, "upload_time": "2018-07-14T04:36:29", "url": "https://files.pythonhosted.org/packages/3d/76/ba135e1a32487e35280a94223f6bcc9d0eaea65b82c7254b22f3bdab74cc/tracktime-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "90ea7e65c3ba79f12c165445b88e8ef3", "sha256": "0d7abbe3b6c86c7c511d3cb57a3915596c245598cdda496c716932c6d027c6e1" }, "downloads": -1, "filename": "tracktime-0.9.3.tar.gz", "has_sig": false, "md5_digest": "90ea7e65c3ba79f12c165445b88e8ef3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12057, "upload_time": "2018-07-14T04:55:37", "url": "https://files.pythonhosted.org/packages/b6/e2/be975ca6bfbc0299582570b1674238c22c0de095d0a9f979a0961fd11fa9/tracktime-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "7d43d234b667ee3d6949f58890eca1cb", "sha256": "1e1d5c36509f69c1f60551f21b33ffdd9b51b7e18018af46b82946cf3c3bd52e" }, "downloads": -1, "filename": "tracktime-0.9.4.tar.gz", "has_sig": false, "md5_digest": "7d43d234b667ee3d6949f58890eca1cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12645, "upload_time": "2018-08-15T02:50:11", "url": "https://files.pythonhosted.org/packages/3e/92/1a8e497f09c87273e42779b730582a1d01f049e05cef3c9cbe1ebb8ac115/tracktime-0.9.4.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "f954ed35b7d14dd4b942466ecf7a5cfe", "sha256": "d51b280f0e7cb8641c5e1a2784b5fedda83dbc371824c3c614af0ee7060bc3dd" }, "downloads": -1, "filename": "tracktime-0.9.5.tar.gz", "has_sig": false, "md5_digest": "f954ed35b7d14dd4b942466ecf7a5cfe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13010, "upload_time": "2018-11-10T00:14:04", "url": "https://files.pythonhosted.org/packages/09/2d/55ebd8c8d00ff512bb885edfb6a3e4ddca21fec4f21e8441e4ca3d433888/tracktime-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "e81c76374a85d6849085ccffe972dd2c", "sha256": "7d348e62764b83cb51cf8cfc0259b49a91ca41e89ebfd1a247ea5e3f64c69b53" }, "downloads": -1, "filename": "tracktime-0.9.6.tar.gz", "has_sig": false, "md5_digest": "e81c76374a85d6849085ccffe972dd2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13212, "upload_time": "2018-11-20T02:13:07", "url": "https://files.pythonhosted.org/packages/f3/fd/c23ebab075a271a702a5ec635bdc4876129e792212b7d7dc329ee8235970/tracktime-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "b7797d924924e3285e8c4b6e1b952468", "sha256": "a59bc9c9a64025c8ad2ab9e3b059fcd84079b780fd2868339e81d8a68ba22649" }, "downloads": -1, "filename": "tracktime-0.9.7.tar.gz", "has_sig": false, "md5_digest": "b7797d924924e3285e8c4b6e1b952468", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13585, "upload_time": "2018-12-17T00:12:58", "url": "https://files.pythonhosted.org/packages/97/11/175b3ea4da99e8045d5ea3bfd6842af113ac91ab8b59174323c934d9230a/tracktime-0.9.7.tar.gz" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "7b516cb163dcd7f184fac939a695ac93", "sha256": "3ce6a3e5f81aea787de8ebaa94b66f7cb866dc7fd0de1e499f85dd38ef3de12a" }, "downloads": -1, "filename": "tracktime-0.9.8.tar.gz", "has_sig": false, "md5_digest": "7b516cb163dcd7f184fac939a695ac93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13761, "upload_time": "2018-12-29T06:41:24", "url": "https://files.pythonhosted.org/packages/74/74/fbd7a723bb01f7dfa836dfeac8f354ee0c9d3cd7c6e12172c16544f2b5fe/tracktime-0.9.8.tar.gz" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "2f8127cd2b7b0efe236a7d4e9c902dd8", "sha256": "79df55d54a2c73adc2044924341025a45da7c9ef53f1c9ae24f8a61048e6f9ba" }, "downloads": -1, "filename": "tracktime-0.9.9.tar.gz", "has_sig": false, "md5_digest": "2f8127cd2b7b0efe236a7d4e9c902dd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16760, "upload_time": "2019-10-09T21:58:53", "url": "https://files.pythonhosted.org/packages/62/39/90b5a8e0465ba0ef1e81ac154a6eaeda5b1b90c9a39976a06a0cc5446abd/tracktime-0.9.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2f8127cd2b7b0efe236a7d4e9c902dd8", "sha256": "79df55d54a2c73adc2044924341025a45da7c9ef53f1c9ae24f8a61048e6f9ba" }, "downloads": -1, "filename": "tracktime-0.9.9.tar.gz", "has_sig": false, "md5_digest": "2f8127cd2b7b0efe236a7d4e9c902dd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16760, "upload_time": "2019-10-09T21:58:53", "url": "https://files.pythonhosted.org/packages/62/39/90b5a8e0465ba0ef1e81ac154a6eaeda5b1b90c9a39976a06a0cc5446abd/tracktime-0.9.9.tar.gz" } ] }