{
"info": {
"author": "Alexander Frenzel",
"author_email": "alex@relatedworks.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Framework :: Django",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "=====================\ndjango-exiffield\n=====================\n\n\n.. image:: https://img.shields.io/pypi/v/django-exiffield.svg\n :target: https://pypi.python.org/pypi/django-exiffield\n\n.. image:: https://travis-ci.org/escaped/django-exiffield.png?branch=master\n :target: http://travis-ci.org/escaped/django-exiffield\n :alt: Build Status\n\n.. image:: https://coveralls.io/repos/escaped/django-exiffield/badge.png?branch=master\n :target: https://coveralls.io/r/escaped/django-exiffield\n :alt: Coverage\n\n.. image:: https://img.shields.io/pypi/pyversions/django-exiffield.svg\n\n.. image:: https://img.shields.io/pypi/status/django-exiffield.svg\n\n.. image:: https://img.shields.io/pypi/l/django-exiffield.svg\n\n\ndjango-exiffield extracts exif information by utilizing ``exiftool``.\n\n\nRequirements\n============\n\n- `exiftool `_\n- Python 3.6\n- Django >= 1.8\n\n\nInstallation\n============\n\n#. Install django-exiffield ::\n\n pip install django-exiffield\n\n#. Make sure ``exiftool`` is executable from you environment.\n\n\nIntegration\n===========\n\nLet's assume we have an image Model with a single ``ImageField``.\nTo extract exif information for an attached image, add an ``ExifField``,\nspecify the name of the ``ImageField`` in the ``source`` argument ::\n\n\n from django.db import models\n\n from exiffield.fields import ExifField\n\n\n class Image(models.Model):\n image = models.ImageField()\n exif = ExifField(\n source='image',\n )\n\n\nand create a migration for the new field.\nThat's it.\n\nAfter attaching an image to your ``ImageField``, the exif information is stored\nas a ``dict`` on the ``ExifField``.\nEach exif information of the dictionary consists of two keys:\n\n* ``desc``: A human readable description\n* ``val``: The value for the entry.\n\nIn the following example we access the camera model ::\n\n image = Image.objects.get(...)\n print(image.exif['Model'])\n # {\n # 'desc': 'Camera Model Name',\n # 'val': 'DMC-GX7',\n # }\n\nAs the exif information is encoded in a simple ``dict`` you can iterate and access\nthe values with all familiar dictionary methods.\n\n\nDenormalizing Fields\n--------------------\n\nSince the ``ExifField`` stores its data simply as text, it is not possible to filter\nor access indiviual values efficiently.\nThe ``ExifField`` provides a convinient way to denormalize certain values using\nthe ``denormalized_fields`` argument.\nIt takes a dictionary with the target field as key and a simple getter function of\ntype ``Callable[[Dict[Dict[str, str]]], Any]``.\nTo denormalize a simple value you can use the provided ``exiffield.getters.exifgetter`` ::\n\n\n from django.db import models\n\n from exiffield.fields import ExifField\n from exiffield.getters import exifgetter\n\n\n class Image(models.Model):\n image = models.ImageField()\n camera = models.CharField(\n editable=False,\n max_length=100,\n )\n exif = ExifField(\n source='image',\n denormalized_fields={\n 'camera': exifgetter('Model'),\n },\n )\n\n\nThere are more predefined getters in ``exiffield.getters``:\n\n``exifgetter(exif_key: str) -> str``\n Get an unmodified exif value.\n\n``get_type() -> str``\n Get file type, e.g. video or image\n\n``get_datetake -> Optional[datetime]``\n Get when the file was created as ``datetime``\n\n``get_orientation -> exiffield.getters.Orientation``\n Get orientation of media file.\n Possible values are ``LANDSCAPE`` and ``PORTRAIT``.\n\n``get_sequenctype -> exiffield.getters.Mode``\n Guess if the image was taken in a sequence.\n Possible values are ``BURST``, ``BRACKETING``, ``TIMELAPSE`` and ``SINGLE``.\n\n``get_sequencenumber -> int``\n Get image position in a sequence.\n\n\nDevelopment\n===========\n\nThis project is using `poetry `_ to manage all dev dependencies.\nClone this repository and run ::\n\n poetry develop\n\n\nto create a virtual enviroment with all dependencies.\nYou can now run the test suite using ::\n\n poetry run pytest\n\n\nThis repository follows the `angular commit conventions `_.\nYou can register a pre-commit hook to validate your commit messages by using\n`husky `_. The configurations are already in place if\nyou have nodejs installed. Just run ::\n\n npm install\n\nand the pre-commit hook will be registered.\n",
"description_content_type": "text/x-rst",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/escaped/django-exiffield",
"keywords": "django,exif",
"license": "BSD-3-Clause",
"maintainer": "Alexander Frenzel",
"maintainer_email": "alex@relatedworks.com",
"name": "django-exiffield",
"package_url": "https://pypi.org/project/django-exiffield/",
"platform": "",
"project_url": "https://pypi.org/project/django-exiffield/",
"project_urls": {
"Documentation": "https://github.com/escaped/django-exiffield/blob/master/README.rst",
"Homepage": "https://github.com/escaped/django-exiffield",
"Repository": "https://github.com/escaped/django-exiffield"
},
"release_url": "https://pypi.org/project/django-exiffield/2.0.0/",
"requires_dist": [
"choicesenum (>=0.2.2)",
"django (>=1.11)",
"pillow (>=5.0,<6.0)",
"jsonfield2 (>=3.0,<4.0)"
],
"requires_python": ">=3.6",
"summary": "django-exiffield extracts exif information by utilizing exiftool.",
"version": "2.0.0"
},
"last_serial": 4647909,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "f791506ecc85baf8abb3c6e03c5b849a",
"sha256": "a3d48b47206128098ef4669698904beb62acc488dd70b4d8f83d844ff5b31b5f"
},
"downloads": -1,
"filename": "django_exiffield-0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f791506ecc85baf8abb3c6e03c5b849a",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 6929,
"upload_time": "2018-03-28T23:05:48",
"url": "https://files.pythonhosted.org/packages/f9/05/4e89b1ec3c7ee16659509bad00c71963136793165ac2b25f44432dd34837/django_exiffield-0.1-py2.py3-none-any.whl"
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "8df936c7f3688d3580f37d0218df73b0",
"sha256": "d912ff02610236dcfadad7e396995ce6761fa7a545b02d61d0b926b59a0ec012"
},
"downloads": -1,
"filename": "django_exiffield-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8df936c7f3688d3580f37d0218df73b0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 15398,
"upload_time": "2018-07-26T20:11:28",
"url": "https://files.pythonhosted.org/packages/e8/e3/37f7dd3318b157b59d1841cb9118671a5839c66b3765e5c80877c9ad9bff/django_exiffield-1.0.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "7141f94fc0c063031339117c0f3633a1",
"sha256": "22b952b6392f177e6550886131ec77d3d100e8a1411c5967fa18b28f6ff9d42c"
},
"downloads": -1,
"filename": "django-exiffield-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "7141f94fc0c063031339117c0f3633a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 7170,
"upload_time": "2018-07-26T20:11:26",
"url": "https://files.pythonhosted.org/packages/dd/1f/d7caf02d72ba17e58280cf142581e1e0959cbc6f94a29aca02355a997e01/django-exiffield-1.0.0.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "58e9f179788d6d9e1fa79f072b9425d1",
"sha256": "e7a84f94d6d301c1d6da20fd20624e5bdef4bb028ddfcc2cfe37c78c69006667"
},
"downloads": -1,
"filename": "django_exiffield-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "58e9f179788d6d9e1fa79f072b9425d1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 15441,
"upload_time": "2018-11-11T21:56:26",
"url": "https://files.pythonhosted.org/packages/62/53/8423ff7524d773fffbc82991581bfd37a81f864bce3f4841ae8b98359c6f/django_exiffield-1.0.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "43b72e0692f1a05f6cc3b1f957a31dc3",
"sha256": "f06812045352e20b439d7bbcf264bda469481d189cc0e4e3fc20d63d53a0448c"
},
"downloads": -1,
"filename": "django-exiffield-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "43b72e0692f1a05f6cc3b1f957a31dc3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 7192,
"upload_time": "2018-11-11T21:56:24",
"url": "https://files.pythonhosted.org/packages/db/11/438c67c11339df7bb632abf6e79e38e3bc1a956115deaf3a10414df3d9ca/django-exiffield-1.0.1.tar.gz"
}
],
"1.1.0": [
{
"comment_text": "",
"digests": {
"md5": "a2b2b295edd0c6e3642030cd90c0674d",
"sha256": "0b4045d32f4ace3c9ae163fe9ad1eb28a8f9f6a91101196dde8dc2f6a47ea1b0"
},
"downloads": -1,
"filename": "django_exiffield-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a2b2b295edd0c6e3642030cd90c0674d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 15469,
"upload_time": "2018-12-04T21:56:32",
"url": "https://files.pythonhosted.org/packages/8e/7b/796835c506f445158994d0d3f68249c7242b799158d8290c877f4abbcc95/django_exiffield-1.1.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5cec27077c196caad1c41155727400a8",
"sha256": "9583f38751c32c2e3f3fcc14ad13e49bb3571438b1bca9086196f0db47b33784"
},
"downloads": -1,
"filename": "django-exiffield-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "5cec27077c196caad1c41155727400a8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 7220,
"upload_time": "2018-12-04T21:56:31",
"url": "https://files.pythonhosted.org/packages/5c/be/907ff2b2d0c01b694dd3fecf47ee88406577556841131d40424789436221/django-exiffield-1.1.0.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "87591f1bb7b4fa9f74eb135a7f2e35d5",
"sha256": "f97dfe2f886d61dc80443b844a973ebf9cd1d32ae90cad2335add00923fd5712"
},
"downloads": -1,
"filename": "django_exiffield-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "87591f1bb7b4fa9f74eb135a7f2e35d5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 16325,
"upload_time": "2018-12-31T10:23:37",
"url": "https://files.pythonhosted.org/packages/3a/bb/9ac1013dd0dc685c638e8bbfb1c575141831bc57c38293fab3c1f47ba49d/django_exiffield-2.0.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bfa815b5d6eff55a9a6a3ae113b74b47",
"sha256": "92c1318054f59ab99616d448aaef598ea1c0811e3f99e489031153bef5a8d920"
},
"downloads": -1,
"filename": "django-exiffield-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "bfa815b5d6eff55a9a6a3ae113b74b47",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 7461,
"upload_time": "2018-12-31T10:23:34",
"url": "https://files.pythonhosted.org/packages/17/cc/709b38573cc4b97c4f60a032392eb117c1c283b9ce0d9f4c51abef48dd63/django-exiffield-2.0.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "87591f1bb7b4fa9f74eb135a7f2e35d5",
"sha256": "f97dfe2f886d61dc80443b844a973ebf9cd1d32ae90cad2335add00923fd5712"
},
"downloads": -1,
"filename": "django_exiffield-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "87591f1bb7b4fa9f74eb135a7f2e35d5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 16325,
"upload_time": "2018-12-31T10:23:37",
"url": "https://files.pythonhosted.org/packages/3a/bb/9ac1013dd0dc685c638e8bbfb1c575141831bc57c38293fab3c1f47ba49d/django_exiffield-2.0.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bfa815b5d6eff55a9a6a3ae113b74b47",
"sha256": "92c1318054f59ab99616d448aaef598ea1c0811e3f99e489031153bef5a8d920"
},
"downloads": -1,
"filename": "django-exiffield-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "bfa815b5d6eff55a9a6a3ae113b74b47",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 7461,
"upload_time": "2018-12-31T10:23:34",
"url": "https://files.pythonhosted.org/packages/17/cc/709b38573cc4b97c4f60a032392eb117c1c283b9ce0d9f4c51abef48dd63/django-exiffield-2.0.0.tar.gz"
}
]
}