{ "info": { "author": "dazuling", "author_email": "azuline@riseup.net", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# tagfiles\n\n[![Build Status](https://travis-ci.org/dazuling/tagfiles.svg?branch=master)](https://travis-ci.org/dazuling/tagfiles)\n[![Coverage Status](https://coveralls.io/repos/github/dazuling/tagfiles/badge.svg?branch=master)](https://coveralls.io/github/dazuling/tagfiles?branch=master)\n[![Pypi](https://img.shields.io/pypi/v/tagfiles.svg)](https://pypi.python.org/pypi/tagfiles)\n[![Pyversions](https://img.shields.io/pypi/pyversions/tagfiles.svg)](https://pypi.python.org/pypi/tagfiles)\n\nA tagging interface for multiple audio formats and metadata containers.\n\nThe supported audio codecs and containers are:\n\n- FLAC in FLAC container\n- MP3 in MP3 container\n- AAC in MP4 container\n- Vorbis in Ogg container\n- Opus in Ogg container\n\nTag mappings are derived from https://picard.musicbrainz.org/docs/mappings/ .\n\n## Usage\n\n```python\n>>> from tagfiles import TagFile, ArtistRoles\n>>> from pprint import pprint\n>>>\n>>> tf = TagFile('/home/dazuling/02. No Captain.m4a')\n>>> print(tf.title)\nNo Captain\n>>> pprint(tf.artist)\n{: ['Lane 8'],\n : ['Poli\u00e7a'],\n : [],\n : [],\n : [''],\n : [],\n : []}\n>>> print(tf.artist[ArtistRoles.MAIN])\n['Lane 8']\n>>> print(tf.date.year)\n2015\n>>> print(tf.date.date)\n2015-01-19\n>>>\n>>> tf.date = '2018-01-19' # Fixing the date!\n>>> print(tf.date.date)\n2018-01-19\n>>> print(tf.date.year)\n2018\n>>> tf.save()\n>>>\n>>> tf = TagFile('/home/dazuling/music.txt')\nTraceback (most recent call last):\n File \"\", line 1, in \n File \"/home/dazuling/devel/tagfiles/tagfiles/__init__.py\", line 27, in TagFile\n raise UnsupportedFileType\ntagfiles.errors.UnsupportedFileType\n```\n\nThe TagFile function takes a filepath as a parameter and returns the class\nwhich corresponds to its container. If an unsupported filetype is passed in,\nthe `UnsupportedFileType` error is raised. Each class presents the same metadata\ninterface, which have the following attributes:\n\n```python\ntitle: str\nversion: str\nalbum: str\nartist_album: List[str]\ncatalog_number: str\nrelease_type: str\ncomment: str\ndate.year: int\ndate.date: str\ntrack_number: str\ntrack_total: str\ndisc_number: str\ndisc_total: str\ngenre: List[str]\nlabel: str\nartist = {\n ArtistRoles.MAIN: List[str]\n ArtistRoles.FEATURE: List[str]\n ArtistRoles.REMIXER: List[str]\n ArtistRoles.PRODUCER: List[str]\n ArtistRoles.COMPOSER: List[str]\n ArtistRoles.CONDUCTOR: List[str]\n ArtistRoles.DJMIXER: List[str]\n}\n```\n\nFields can be edited by setting new values to the attributes of the TagFile.\nTo edit the date, which is special, assign a string in the format of `%Y-%m-%d`\nor `%Y` to the `date` attribute. To save the changes made to the tags, call the\n`save()` method.\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/dazuling/tagfiles", "keywords": "", "license": "Apache-2.0", "maintainer": "dazuling", "maintainer_email": "azuline@riseup.net", "name": "tagfiles", "package_url": "https://pypi.org/project/tagfiles/", "platform": "", "project_url": "https://pypi.org/project/tagfiles/", "project_urls": { "Homepage": "https://github.com/dazuling/tagfiles", "Repository": "https://github.com/dazuling/tagfiles" }, "release_url": "https://pypi.org/project/tagfiles/0.1.5/", "requires_dist": [ "mutagen (>=1.42,<2.0)" ], "requires_python": ">=3.7,<4.0", "summary": "A tagging interface for multiple audio formats and metadata containers.", "version": "0.1.5" }, "last_serial": 5793858, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e4a8baf3ca105dbed1cbcd289b6fa015", "sha256": "8b6b2e33bc88f26f9cdc2cbcc5b66a22e3bf39a016b51d99249c73014b7cf1c8" }, "downloads": -1, "filename": "tagfiles-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e4a8baf3ca105dbed1cbcd289b6fa015", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8106, "upload_time": "2019-07-08T13:55:20", "url": "https://files.pythonhosted.org/packages/39/fe/3f7bac7f78b4110375ee2b47e17aa3c85a6803dd4bafe4c46cd6920294c9/tagfiles-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f3dc7d49e0fd499b161704e2b3058e5", "sha256": "fafd0772f0e4d9c8102c748d87e6e1a0f84bcd650f32fffc915038da7f4af874" }, "downloads": -1, "filename": "tagfiles-0.1.0.tar.gz", "has_sig": false, "md5_digest": "2f3dc7d49e0fd499b161704e2b3058e5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 5929, "upload_time": "2019-07-08T13:55:22", "url": "https://files.pythonhosted.org/packages/ea/be/b8524a2b7d4bebc0d44b6146076c8e55ec663bc133e6291461f54b9dfdff/tagfiles-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "62e084bbe71f452702dfd096434d7d17", "sha256": "7f01ec24db34603fa837252375558f93cb56e202197e61eb953c29d42982717c" }, "downloads": -1, "filename": "tagfiles-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "62e084bbe71f452702dfd096434d7d17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8451, "upload_time": "2019-07-08T13:57:12", "url": "https://files.pythonhosted.org/packages/5d/33/4ab45dcf9f48d79d248bfc197ae918a5b11e4b3bfe880f15e0cd7f3d3734/tagfiles-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "213f4221ec058ac947fb6bfa8bb2e41f", "sha256": "08b715b81283e694009565bb58571dcb7fd9e4ad514973e6eb656d9555117d30" }, "downloads": -1, "filename": "tagfiles-0.1.1.tar.gz", "has_sig": false, "md5_digest": "213f4221ec058ac947fb6bfa8bb2e41f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 6688, "upload_time": "2019-07-08T13:57:13", "url": "https://files.pythonhosted.org/packages/15/c7/24d7f89958aa500a991807752bb21524b15782af640ebce0bc24b7fd00f2/tagfiles-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "84cbec1d8924c389dfa691dc2a5bb485", "sha256": "a016ab3d7796d421eb927fc3239977365498a096d57a8b306539319dea74ca65" }, "downloads": -1, "filename": "tagfiles-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "84cbec1d8924c389dfa691dc2a5bb485", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 11784, "upload_time": "2019-07-10T13:14:40", "url": "https://files.pythonhosted.org/packages/fa/e5/590a8ebd1f09026cfda6808f8f6cbfa76dca9ffb439e4a0445ffa147caae/tagfiles-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e789f64c6750e087fdf9120ee1518f4", "sha256": "052c8831d25dedbc6bef4ac6dd6501d630801de0ed473599c407de2575d67b8d" }, "downloads": -1, "filename": "tagfiles-0.1.2.tar.gz", "has_sig": false, "md5_digest": "2e789f64c6750e087fdf9120ee1518f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 10010, "upload_time": "2019-07-10T13:14:41", "url": "https://files.pythonhosted.org/packages/a1/d6/f7cdb59d3758e80f7a1de8bba6c02482ff7c6fc4b7460048643866dc8a86/tagfiles-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a4514c39cd31a0377974651734ea5887", "sha256": "82dc3e5e8d31d3cfa49dff57822586b311deefda28b0ceb08e1af88c759e4201" }, "downloads": -1, "filename": "tagfiles-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a4514c39cd31a0377974651734ea5887", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 12591, "upload_time": "2019-07-27T04:53:23", "url": "https://files.pythonhosted.org/packages/49/35/7c1912170a7f7d436c9c61346ee04a98a657042819a16ce08d1debdc6076/tagfiles-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b79c811ffc39d230c95cd5f969c84657", "sha256": "a6fcf4595e9c7e7860c37c3834c539b33b0360bb06bc65845c65f78399303214" }, "downloads": -1, "filename": "tagfiles-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b79c811ffc39d230c95cd5f969c84657", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 11727, "upload_time": "2019-07-27T04:53:25", "url": "https://files.pythonhosted.org/packages/dc/7b/0a8627f515f758f30c3e901a39fe4e93812332250a4b9273f40d8de0eacc/tagfiles-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "ad2cdb032e8ecc92cd48076917ffdaca", "sha256": "0fa30ab6326dac4125629604a632a266f86a21cdea0c5a775fffc44dfd8f0dfc" }, "downloads": -1, "filename": "tagfiles-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ad2cdb032e8ecc92cd48076917ffdaca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 12597, "upload_time": "2019-07-31T15:53:07", "url": "https://files.pythonhosted.org/packages/e7/72/dd9c46a6b27f7c9d4dfe356630cf657cc3a78f530d303f481191b0f9faea/tagfiles-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdd83db99ddde7bb167cd8b318f768c0", "sha256": "32a8066f48f0ad6094a862a06ad191feff551ffdab940b9ca884c7af55d2e551" }, "downloads": -1, "filename": "tagfiles-0.1.4.tar.gz", "has_sig": false, "md5_digest": "bdd83db99ddde7bb167cd8b318f768c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 11643, "upload_time": "2019-07-31T15:53:09", "url": "https://files.pythonhosted.org/packages/28/9e/b0160632fd82276e16317169c6641b97deb5ae190ed6800856a50b0aa731/tagfiles-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "add88a62a67a9f19d53e629940f81f6f", "sha256": "3c9b8d2657a25dce27cd4e8fbf6ddd72768f89006520297da23eba9f87be6725" }, "downloads": -1, "filename": "tagfiles-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "add88a62a67a9f19d53e629940f81f6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 12593, "upload_time": "2019-08-09T15:31:34", "url": "https://files.pythonhosted.org/packages/06/e4/60ddb3aff304d1a8ba383adfa77fe108d3299b3b15f1453301d21a93ec40/tagfiles-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "091af71c5880909c60a2af261f80bcec", "sha256": "4d8334551c0b752457b13923cec34a65d9d1377fc1da991c6eae56f9af213d83" }, "downloads": -1, "filename": "tagfiles-0.1.5.tar.gz", "has_sig": false, "md5_digest": "091af71c5880909c60a2af261f80bcec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 11653, "upload_time": "2019-08-09T15:31:36", "url": "https://files.pythonhosted.org/packages/38/72/e671edaefaf6e4dae5bce5fc45ec50a88276db5b25d3d13a480e24e26632/tagfiles-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "add88a62a67a9f19d53e629940f81f6f", "sha256": "3c9b8d2657a25dce27cd4e8fbf6ddd72768f89006520297da23eba9f87be6725" }, "downloads": -1, "filename": "tagfiles-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "add88a62a67a9f19d53e629940f81f6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 12593, "upload_time": "2019-08-09T15:31:34", "url": "https://files.pythonhosted.org/packages/06/e4/60ddb3aff304d1a8ba383adfa77fe108d3299b3b15f1453301d21a93ec40/tagfiles-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "091af71c5880909c60a2af261f80bcec", "sha256": "4d8334551c0b752457b13923cec34a65d9d1377fc1da991c6eae56f9af213d83" }, "downloads": -1, "filename": "tagfiles-0.1.5.tar.gz", "has_sig": false, "md5_digest": "091af71c5880909c60a2af261f80bcec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 11653, "upload_time": "2019-08-09T15:31:36", "url": "https://files.pythonhosted.org/packages/38/72/e671edaefaf6e4dae5bce5fc45ec50a88276db5b25d3d13a480e24e26632/tagfiles-0.1.5.tar.gz" } ] }