Skip to content

Commit b1a874c

Browse files
make phonenumbers and django-phonenumber-field optional
1 parent 1928748 commit b1a874c

File tree

5 files changed

+57
-30
lines changed

5 files changed

+57
-30
lines changed

setup.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,21 @@
1515
'Django>=3.2',
1616
'django_otp>=0.8.0',
1717
'qrcode>=4.0.0,<7.99',
18-
'django-phonenumber-field<8',
1918
'django-formtools',
2019
],
2120
extras_require={
2221
'call': ['twilio>=6.0'],
2322
'sms': ['twilio>=6.0'],
2423
'webauthn': ['webauthn>=2.0,<2.99'],
2524
'yubikey': ['django-otp-yubikey'],
26-
'phonenumbers': ['phonenumbers>=7.0.9,<8.99'],
27-
'phonenumberslite': ['phonenumberslite>=7.0.9,<8.99'],
25+
'phonenumbers': [
26+
'phonenumbers>=7.0.9,<8.99',
27+
'django-phonenumber-field<8',
28+
],
29+
'phonenumberslite': [
30+
'phonenumberslite>=7.0.9,<8.99',
31+
'django-phonenumber-field<8',
32+
],
2833
# used internally for local development & CI
2934
'tests': [
3035
'coverage',

two_factor/migrations/0003_auto_20150817_1733.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import logging
22

3-
import phonenumbers
3+
from django.apps import apps
44
from django.db import migrations
5-
from phonenumber_field.modelfields import PhoneNumberField
65

76
logger = logging.getLogger(__name__)
87

98

109
def migrate_phone_numbers(apps, schema_editor):
10+
import phonenumbers
11+
1112
PhoneDevice = apps.get_model("two_factor", "PhoneDevice")
1213
for device in PhoneDevice.objects.all():
1314
try:
@@ -29,11 +30,17 @@ class Migration(migrations.Migration):
2930
('two_factor', '0002_auto_20150110_0810'),
3031
]
3132

32-
operations = [
33-
migrations.RunPython(migrate_phone_numbers, reverse_code=migrations.RunPython.noop),
34-
migrations.AlterField(
35-
model_name='phonedevice',
36-
name='number',
37-
field=PhoneNumberField(max_length=16, verbose_name='number'),
38-
),
39-
]
33+
if apps.is_installed('two_factor.plugins.phonenumber'):
34+
from phonenumber_field.modelfields import PhoneNumberField
35+
36+
operations = [
37+
migrations.RunPython(migrate_phone_numbers, reverse_code=migrations.RunPython.noop),
38+
migrations.AlterField(
39+
model_name='phonedevice',
40+
name='number',
41+
field=PhoneNumberField(max_length=16, verbose_name='number'),
42+
),
43+
]
44+
45+
else:
46+
operations = []
Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Generated by Django 1.9.2 on 2016-02-05 17:27
2-
3-
import phonenumber_field.modelfields
2+
from django.apps import apps
43
from django.db import migrations
54

65

@@ -10,10 +9,15 @@ class Migration(migrations.Migration):
109
('two_factor', '0003_auto_20150817_1733'),
1110
]
1211

13-
operations = [
14-
migrations.AlterField(
15-
model_name='phonedevice',
16-
name='number',
17-
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128),
18-
),
19-
]
12+
if apps.is_installed('two_factor.plugins.phonenumber'):
13+
import phonenumber_field.modelfields
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='phonedevice',
18+
name='number',
19+
field=phonenumber_field.modelfields.PhoneNumberField(max_length=128),
20+
),
21+
]
22+
else:
23+
operations = []

two_factor/views/core.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import django_otp
1010
import qrcode
1111
import qrcode.image.svg
12+
from django.apps import apps
1213
from django.conf import settings
1314
from django.contrib.auth import REDIRECT_FIELD_NAME, login
1415
from django.contrib.auth.decorators import login_required
@@ -35,7 +36,6 @@
3536
from django_otp.util import random_hex
3637

3738
from two_factor import signals
38-
from two_factor.plugins.phonenumber.utils import get_available_phone_methods
3939
from two_factor.plugins.registry import registry
4040
from two_factor.utils import totp_digits
4141
from two_factor.views.mixins import OTPRequiredMixin
@@ -685,8 +685,14 @@ def get(self, request, *args, **kwargs):
685685
return super().get(request, *args, **kwargs)
686686

687687
def get_context_data(self):
688+
phone_methods = None
689+
if (apps.is_installed('two_factor.plugins.phonenumber')):
690+
from two_factor.plugins.phonenumber.utils import get_available_phone_methods
691+
692+
phone_methods = get_available_phone_methods()
693+
688694
return {
689-
'phone_methods': get_available_phone_methods(),
695+
'phone_methods': phone_methods,
690696
}
691697

692698

two_factor/views/profile.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.apps import apps
12
from django.conf import settings
23
from django.contrib.auth.decorators import login_required
34
from django.shortcuts import redirect, resolve_url
@@ -7,10 +8,6 @@
78
from django_otp import devices_for_user
89
from django_otp.decorators import otp_required
910

10-
from two_factor.plugins.phonenumber.utils import (
11-
backup_phones, get_available_phone_methods,
12-
)
13-
1411
from ..forms import DisableForm
1512
from ..utils import default_device
1613
from .utils import class_view_decorator
@@ -41,10 +38,18 @@ def get_context_data(self, **kwargs):
4138
'default_device': default_device(user),
4239
'default_device_type': default_device(user).__class__.__name__,
4340
'backup_tokens': backup_tokens,
44-
'backup_phones': backup_phones(user),
45-
'available_phone_methods': get_available_phone_methods(),
4641
}
4742

43+
if apps.is_installed('two_factor.plugins.phonenumber'):
44+
from two_factor.plugins.phonenumber.utils import (
45+
backup_phones, get_available_phone_methods,
46+
)
47+
48+
context.update({
49+
'backup_phones': backup_phones(self.request.user),
50+
'available_phone_methods': get_available_phone_methods(),
51+
})
52+
4853
return context
4954

5055

0 commit comments

Comments
 (0)