A strawberry + Django integration for phone numbers
Project description
strawberry-django-phonenumber
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.9+ (likely earlier versions too, needs tested)
- Django 3+
- strawberry-graphql-django 0.17+
- django-phonenumber-field 7+
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)
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 bool(request.user) 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,
graphiql=True,
)
),
),
]
Installation
pip install strawberry-django-phonenumber
Changelog
0.2.0
- Remove psycopg2-binary dependency, allow psycopg>=3
0.1.0
- Initial release
Contributing
Running tests:
poetry run pytest
That's it, lite process for now. Please open a pull request or issue.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file strawberry_django_phonenumber-0.2.0.tar.gz
.
File metadata
- Download URL: strawberry_django_phonenumber-0.2.0.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82e993e54205801ecd3cca4812911cd1ab988ec2dbd076a7a265a3106a6ee537 |
|
MD5 | bcd81ea9af90723c667b4398cd046428 |
|
BLAKE2b-256 | c7b855c92f5221b7a52315901e4bc71185109b2b49cc64af895c52c3a7770930 |
File details
Details for the file strawberry_django_phonenumber-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: strawberry_django_phonenumber-0.2.0-py3-none-any.whl
- Upload date:
- Size: 4.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | de6dc3f7d9740592218c20e17d0a0e1e637357462c8b484bdb5dad28c3d08e66 |
|
MD5 | ceefcc32b832edf1c39deb65cae48654 |
|
BLAKE2b-256 | 86aecb590444d856768123571e239a0fc74c9915fe45813d791b7aa0af56e901 |