Skip to main content

strawberry-django-phonenumber

build status

Introduction

GraphQL types for Phone Numbers with Strawberry Django. If you use django, strawberry, and django-phonenumber-field, this library is for you.

Supported on:

  • Python 3.10+
  • Django 3+
  • strawberry-graphql-django 0.17+
  • django-phonenumber-field 7+

CI tests Python 3.10 (minimum supported) and 3.14 (latest).

Here's how it works. Automagically get this query:

query User {
  phoneNumber {
    ...phoneNumberFragment
  }
}

fragment phoneNumberFragment on PhoneNumber {
    asInternational  # +1 415-418-3420
    asNational  # (415) 418-3420
    asE164
    asRfc3966
    countryCode  # 1
    nationalNumber
    extension
    rawInput
}

With this code:

# yourapp/models.py
from django.contrib.auth.models import AbstractUser
from phonenumber_field.modelfields import PhoneNumberField


class User(AbstractUser):
    phone_number = PhoneNumberField(blank=True)

# yourapp/graphql/types.py
from typing import Optional, cast

import strawberry
import strawberry_django
from strawberry.types import Info
from strawberry_django_phonenumber import PhoneNumber

from yourapp import models


@strawberry_django.type(models.User, fields=["first_name", "last_name"])
class User(strawberry.relay.Node):
    """GraphQL type for the User model."""

    @strawberry_django.field
    async def phone_number(root, info: Info) -> Optional[PhoneNumber]:
        if not root.phone_number:
            return None
        return cast(PhoneNumber, root.phone_number)

# yourapp/graphql/__init__.py
from typing import Optional

import strawberry
import strawberry_django
from asgiref.sync import sync_to_async
from strawberry.types import Info

from .types import User


@sync_to_async
def aget_user_from_request(request):
    return request.user if request.user.is_authenticated else None


@strawberry.type
class Queries:
    @strawberry_django.field
    async def me(self, info: Info) -> Optional[User]:
        user = await aget_user_from_request(info.context.request)
        return user


schema = strawberry.Schema(query=Queries)

# yourapp/urls.py

from django.urls import path
from django.views.decorators.csrf import csrf_exempt
from strawberry.django.views import AsyncGraphQLView

from .graphql import schema

urlpatterns = [
    path(
        "graphql/",
        csrf_exempt(
            AsyncGraphQLView.as_view(
                schema=schema,
                graphql_ide="graphiql",
            )
        ),
    ),
]

Installation

pip install strawberry-django-phonenumber

Changelog

0.2.2

- Replace Safety with pip-audit; refresh lockfile and dependency versions
- CI tests Python 3.10 and 3.14; consolidated lint job; updated GitHub Actions
- Dependabot with grouped minor/patch updates; optional pre-commit hook
- Docs: Python 3.10+; `graphql_ide` instead of deprecated `graphiql` on `AsyncGraphQLView`

0.2.1

- Remove deprecated strawberry-graphql debug-server extra

0.2.0

- Remove psycopg2-binary dependency, allow psycopg>=3

0.1.0

- Initial release

Contributing

Install dependencies and run tests (requires PostgreSQL; CI uses postgres / postgres on port 5432):

./poetry-install.sh
export PG_PASSWORD=postgres
poetry run pytest

Lint and security checks (same as CI):

./lint.sh --check

Format/fix locally:

./lint.sh

Optional pre-commit hook (runs ./lint.sh --check):

poetry run pre-commit install

Please open a pull request or issue.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

strawberry_django_phonenumber-0.2.2.tar.gz (3.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file strawberry_django_phonenumber-0.2.2.tar.gz.

File metadata

File hashes

Hashes for strawberry_django_phonenumber-0.2.2.tar.gz
Algorithm Hash digest
SHA256 dc63df0b59ccc78a800268653e362efd58d593f700414c346022faebb2149f94
MD5 27009f457e2979523b53e662072067c7
BLAKE2b-256 8ff4611feee78dcca6249f950a8637cb68a650ce6551c65bb0899317918ff208

See more details on using hashes here.

Provenance

The following attestation bundles were made for strawberry_django_phonenumber-0.2.2.tar.gz:

Publisher: publish.yml on UpliftAgency/strawberry-django-phonenumber

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file strawberry_django_phonenumber-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for strawberry_django_phonenumber-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c75a7b5f11cdf807fce5b22a030f9e7c84d9b440c5a88a34d53d6cc61ab479d1
MD5 1ed97c1673af7255fee8f601a32b7678
BLAKE2b-256 c04291a8d68674c62e4c602969cc845af9753880a3c8b1f032534338427b4100

See more details on using hashes here.

Provenance

The following attestation bundles were made for strawberry_django_phonenumber-0.2.2-py3-none-any.whl:

Publisher: publish.yml on UpliftAgency/strawberry-django-phonenumber

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page