{ "info": { "author": "James C. Palmer", "author_email": "me@jcp.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "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" ], "description": "# Names\n\n[![pypi](https://img.shields.io/pypi/v/django-names.svg)](https://pypi.org/project/django-names/)\n[![pypi](https://img.shields.io/pypi/pyversions/django-names.svg)](https://pypi.org/project/django-names/)\n[![codecov](https://codecov.io/gh/jcp/django-names/branch/master/graph/badge.svg)](https://codecov.io/gh/jcp/django-names)\n[![Build Status](https://travis-ci.org/jcp/django-names.svg?branch=master)](https://travis-ci.org/jcp/django-names)\n\nNames is a reusable app for Django that provides mixins, models and form fields\nto store a full name and its individual components. The following name\ncomponents are supported:\n\n- Full name\n- Title\n- First name\n- Middle name\n- Last name\n- Suffix\n- Nickname\n\nNames officially supports the following:\n\n* Python 3.6 - 3.7\n* Django 1.11, 2.0 - 2.2\n\n## Table of Contents\n\n* [Installation](#installation)\n* [Basic Usage](#basic-usage)\n* [Features](#features)\n * [Name model](#name)\n * [NameField model field](#namefield)\n * [NameModelMixin mixin](#namemodelmixin)\n* [Settings](#settings)\n\n\n## Installation\n\nTo install, simply use [pipenv](http://pipenv.org/) (or pip):\n\n```bash\n>>> pipenv install django-names\n```\n\nAdd `names` to your `INSTALLED_APPS` setting:\n\n```python\nINSTALLED_APPS = [\n ...\n \"names\",\n]\n```\n\nRun migrations:\n\n```bash\n>>> python manage.py migrate names\n```\n\n## Basic Usage\n\n```bash\n>>> from names.models import Name\n>>> name = Name.objects.create(full=\"Natalia Alianovna 'Natasha' Romanova\")\n>>> name.full\n'Natalia Alianovna Romanova (Natasha)'\n>>> name.first\n'Natalia'\n>>> name.middle\n'Alianovna'\n>>> name.last\n'Romanova'\n>>> name.nickname\n'Natasha'\n```\n\n## Features\n\nNames was designed to be flexible. It comes with three primary features:\n\n- [`Name`](#name-model): A model that parses and stores full names.\n- [`NameField`](#namefield-model-field): A model field that provides a one-to-one relationship to a `Name` instance.\n- [`NameModelMixin`](#namemodelmixin-mixin): A mixin that can be used to extend existing models.\n\n### `Name` model\n\nThe `Name` model contains fields and methods that store a full name and its\nindividual components.\n\n```bash\n>>> from names.models import Name\n>>> name = Name.objects.create(full=\"Anthony Edward Stark (Tony)\")\n>>> name\n\n>>> name.full\n'Anthony Edward Stark (Tony)'\n>>> name.title\n''\n>>> name.first\n'Anthony'\n>>> name.middle\n'Edward'\n>>> name.last\n'Stark'\n>>> name.suffix\n''\n>>> name.nickname\n'Tony'\n```\n\nWhen you update an individual name component, the full name updates\nautomatically when the instance is saved.\n\n```bash\n>>> name.nickname = \"Iron Man\"\n>>> name.save()\n>>> name.full\n'Anthony Edward Stark (Iron Man)'\n```\n\n### `NameField` model field\n\n`NameField` has a one-to-one relationship to a `Name` instance.\n\n```python\nfrom names.fields import NameField\n\nclass User(models.Model):\n name = NameField(on_delete=models.CASCADE)\n```\n\n```bash\n>>> from names.models import Name\n>>> name = Name.objects.create(full=\"Carol Susan Jane Danvers\")\n>>> User = User.objects.create(name=name)\n>>> user.name.full\n'Carol Susan Jane Danvers'\n```\n\n### `NameModelMixin` mixin\n\n`Name` inherits its functionality from the `NameModelMixin` mixin. You can\nuse this mixin to extend existing models to avoid adding a field with a\none-to-one relationship or additional database tables.\n\n```python\nfrom names.mixins import NameModelMixin\n\nclass User(NameModelMixin):\n pass\n```\n\n```bash\n>>> user = User.objects.create(full=\"General Nicholas Joseph 'Nick' Fury\")\n>>> user.full\n'General Nicholas Joseph Fury (Nick)'\n>>> user.title\n'General'\n```\n\n## Settings\n\nNames uses the `NAME_SETTINGS` namespace for all settings. The following settings\nare supported:\n\n* [MAX_LENGTH](#max_length)\n* [STRING_FORMAT](#string_format)\n* [EMPTY_ATTRIBUTE_DEFAULT](#empty_attribute_default)\n* [OPTIONS](#options)\n * TITLES\n * FIRST_NAME_TITLES\n * SUFFIX_ACRONYMS\n * SUFFIX_NOT_ACRONYMS\n * CONJUNCTIONS\n * PREFIXES\n * CAPITALIZATION_EXCEPTIONS\n * REGEXES\n\n### MAX_LENGTH\n\n`type `\n\nMax length of each `CharField` defined in the `NameModelMixin` mixin.\n\nDefault:\n```python\n100\n```\n\n### STRING_FORMAT\n\n`type `\n\nSets the output string for the `full` field.\n\n**Default**\n```python\n\"{title} {first} {middle} {last} {suffix} ({nickname})\"\n```\n\n> **Learn more**\n>\n> [Change the output string with string formatting](https://nameparser.readthedocs.io/en/latest/usage.html#change-the-output-string-with-string-formatting)\n\n### EMPTY_ATTRIBUTE_DEFAULT\n\n`type `\n\nValue returned by empty name attributes.\n\n**Default**\n```python\n\"\" # empty string\n```\n\n### OPTIONS\n\n`type `\n\nHandles recognition of titles, prefixes, suffixes and conjunctions. The `OPTIONS` setting is\nvery powerful and can be used to customize how you parse names.\n\n**Default**\n```python\n\"OPTIONS\": {\n \"TITLES\": TITLES,\n \"SUFFIX_NOT_ACRONYMS\": SUFFIX_NOT_ACRONYMS,\n \"CONJUNCTIONS\": CONJUNCTIONS,\n \"PREFIXES\": PREFIXES,\n \"CAPITALIZATION_EXCEPTIONS\": CAPITALIZATION_EXCEPTIONS,\n \"REGEXES\": REGEXES,\n}\n```\n\n*Options are imported from [`python-nameparser`](https://github.com/derek73/python-nameparser), which is the library used to parse names.*\n\n> **Learn more**\n>\n> [Editable attributes](https://nameparser.readthedocs.io/en/latest/customize.html#editable-attributes-of-nameparser-config-constants)\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/jcp/django-names", "keywords": "", "license": "BSD 3-Clause", "maintainer": "", "maintainer_email": "", "name": "django-names", "package_url": "https://pypi.org/project/django-names/", "platform": "", "project_url": "https://pypi.org/project/django-names/", "project_urls": { "Homepage": "https://github.com/jcp/django-names" }, "release_url": "https://pypi.org/project/django-names/1.0.5/", "requires_dist": [ "Django (>=1.11)", "nameparser (>=1.0.4)" ], "requires_python": ">=3.6", "summary": "Names is a reusable app for Django that provides mixins, models and form fields to store a full name and its individual components.", "version": "1.0.5" }, "last_serial": 5706018, "releases": { "1.0.3": [ { "comment_text": "", "digests": { "md5": "43f02a3aeadb77a8213131438c6c913f", "sha256": "3b231b32aa273ff153dd642026bb79000aa58730660fad201fc82ead3727efd9" }, "downloads": -1, "filename": "django-names-1.0.3.tar.gz", "has_sig": false, "md5_digest": "43f02a3aeadb77a8213131438c6c913f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16665, "upload_time": "2019-07-22T00:37:20", "url": "https://files.pythonhosted.org/packages/29/79/2f1011a0f4cc6b526c20a1b8cb866b0f329c579f262e8e0b40f4b99de2ce/django-names-1.0.3.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "93d5808395b35f7428a74365844c6792", "sha256": "9c3f39a97115154b2474cf696c7d69d1361a93046cc0298d76c66178052ac504" }, "downloads": -1, "filename": "django_names-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "93d5808395b35f7428a74365844c6792", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 9278, "upload_time": "2019-08-20T22:46:23", "url": "https://files.pythonhosted.org/packages/65/d6/f51c8c91762b3159be62e15e9081e9fa5fd257135f7e73de609e7ff4c337/django_names-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a7a8eb71d264436ce806125ddc0e057", "sha256": "60a0161d42c05559c8bcb0495288577d6a87b9aa1f51a0bfb8b2b24935e6d52b" }, "downloads": -1, "filename": "django-names-1.0.5.tar.gz", "has_sig": false, "md5_digest": "0a7a8eb71d264436ce806125ddc0e057", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15784, "upload_time": "2019-08-20T22:46:24", "url": "https://files.pythonhosted.org/packages/03/bf/ca5dd7e53a6385020c70fdad3895f6796d96261074e60b9ab4ac5a870ade/django-names-1.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "93d5808395b35f7428a74365844c6792", "sha256": "9c3f39a97115154b2474cf696c7d69d1361a93046cc0298d76c66178052ac504" }, "downloads": -1, "filename": "django_names-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "93d5808395b35f7428a74365844c6792", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 9278, "upload_time": "2019-08-20T22:46:23", "url": "https://files.pythonhosted.org/packages/65/d6/f51c8c91762b3159be62e15e9081e9fa5fd257135f7e73de609e7ff4c337/django_names-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a7a8eb71d264436ce806125ddc0e057", "sha256": "60a0161d42c05559c8bcb0495288577d6a87b9aa1f51a0bfb8b2b24935e6d52b" }, "downloads": -1, "filename": "django-names-1.0.5.tar.gz", "has_sig": false, "md5_digest": "0a7a8eb71d264436ce806125ddc0e057", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15784, "upload_time": "2019-08-20T22:46:24", "url": "https://files.pythonhosted.org/packages/03/bf/ca5dd7e53a6385020c70fdad3895f6796d96261074e60b9ab4ac5a870ade/django-names-1.0.5.tar.gz" } ] }