Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Django/1to2 #1066

Merged
merged 28 commits into from
Oct 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
360edf5
django 1to2 with working tests
jarosenb Feb 12, 2023
4f8358b
Bug fixes and requirements export
jarosenb Feb 12, 2023
eac8ad5
re-add context processor
jarosenb Feb 13, 2023
b66a2a8
update packages to LTS versions
jarosenb Feb 13, 2023
322f7b5
Merge branch 'main' into django/1to2
jarosenb Feb 13, 2023
de782ff
re-enable broken test
jarosenb Feb 13, 2023
5162f67
increment major version in pyproject.toml
jarosenb Feb 13, 2023
398c419
Merge branch 'main' into django/1to2
jarosenb Feb 15, 2023
0b54a53
Merge branch 'main' into django/1to2
jarosenb Feb 17, 2023
e4226d1
Merge branch 'main' into django/1to2
jarosenb Apr 3, 2023
f960020
Merge branch 'main' into django/1to2
jarosenb Apr 10, 2023
2e032d9
Merge branch 'main' into django/1to2
jarosenb Apr 11, 2023
566b1fc
Merge branch 'main' into django/1to2
jarosenb May 2, 2023
613eed5
Merge branch 'main' into django/1to2
jarosenb May 10, 2023
8bbceb5
pin django-treebeard version
May 15, 2023
0587ab5
specify poetry version
May 15, 2023
5aac077
Merge branch 'main' into django/1to2
jarosenb Jun 1, 2023
1451a14
Merge branch 'main' into django/1to2
jarosenb Jun 1, 2023
d8c0d58
revert Fido to working version
Jun 5, 2023
8da799b
Merge branch 'main' into django/1to2
Jun 6, 2023
a309ebc
use vendored djangocms-cascade plugin
Jun 7, 2023
102fc5f
move to django-cms 3.7
Jun 7, 2023
686f2f8
Merge branch 'main' into django/1to2
Aug 23, 2023
fb01fce
Update dependencies and middleware
Aug 23, 2023
537097b
Merge branch 'main' into django/1to2
jarosenb Aug 29, 2023
b729726
Merge branch 'main' into django/1to2
jarosenb Sep 8, 2023
e89418c
Merge branch 'main' into django/1to2
jarosenb Sep 19, 2023
9b27450
Merge branch 'main' into django/1to2
jarosenb Oct 2, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion designsafe/LoginTest.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#python manage.py test designsafe.LoginTest --settings=designsafe.settings.test_settings
from django.test import TestCase, RequestFactory
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.urls import reverse
import mock
from designsafe.apps.auth.models import AgaveOAuthToken
from designsafe.apps.auth.tasks import check_or_create_agave_home_dir
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/accounts/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging
from django import forms
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from django.utils.html import escape
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/accounts/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('ethnicity', models.CharField(max_length=255)),
('gender', models.CharField(max_length=255)),
('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(related_name='profile', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
]
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('announcements', models.BooleanField(default=True, help_text='Receive occasional announcements from DesignSafe')),
('user', models.OneToOneField(related_name='notification_preferences', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(related_name='notification_preferences', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
]
6 changes: 3 additions & 3 deletions designsafe/apps/accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@ def __str__(self):


class DesignSafeProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile')
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE)
ethnicity = models.CharField(max_length=255)
gender = models.CharField(max_length=255)
agree_to_account_limit = models.DateTimeField(auto_now_add=True, null=True)
bio = models.CharField(max_length=4096, default=None, null=True, blank=True)
website = models.CharField(max_length=256, default=None, null=True, blank=True)
orcid_id = models.CharField(max_length=256, default=None, null=True, blank=True)
nh_interests = models.ManyToManyField(DesignSafeProfileNHInterests)
nh_interests_primary = models.ForeignKey(DesignSafeProfileNHInterests, related_name='nh_interests_primary', null=True)
nh_interests_primary = models.ForeignKey(DesignSafeProfileNHInterests, related_name='nh_interests_primary', null=True, on_delete=models.CASCADE)
nh_technical_domains = models.ManyToManyField(DesignSafeProfileNHTechnicalDomains)
professional_level = models.CharField(max_length=256, default=None, null=True)
research_activities = models.ManyToManyField(DesignSafeProfileResearchActivities)
Expand All @@ -86,7 +86,7 @@ def send_mail(self, subject, body=None):

class NotificationPreferences(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,
related_name='notification_preferences')
related_name='notification_preferences', on_delete=models.CASCADE)
announcements = models.BooleanField(
default=True,
verbose_name=_('Announcements: to communicate EF Workshops, NHERI Newsletter, Student Opportunities, etc.'))
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/accounts/tests.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.test import TestCase
from django.contrib.auth import get_user_model, signals
from django.contrib.auth.models import Permission
from django.core.urlresolvers import reverse
from django.urls import reverse
from unittest import skip
from mock import patch
import pytest
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/accounts/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf.urls import include, url
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from designsafe.apps.accounts import views

Expand Down
3 changes: 1 addition & 2 deletions designsafe/apps/accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
from django.contrib.auth import get_user_model, logout
from django.contrib.auth.decorators import login_required, permission_required
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.utils.translation import ugettext_lazy as _
from designsafe.apps.accounts import forms, integrations
from designsafe.apps.accounts.models import (NEESUser, DesignSafeProfile,
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/datafiles/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from designsafe.apps.api.datafiles.operations import shared_operations
from designsafe.apps.api.exceptions import ApiException
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.urls import reverse

logger = logging.getLogger(__name__)

Expand Down
3 changes: 1 addition & 2 deletions designsafe/apps/api/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import logging
from functools import wraps
from base64 import b64decode
from django.utils.six import text_type
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth import login
Expand Down Expand Up @@ -52,7 +51,7 @@ def _get_jwt_payload(request):
:rtype: str
"""
payload = request.META.get(settings.AGAVE_JWT_HEADER)
if payload and isinstance(payload, text_type):
if payload and isinstance(payload, str):
# Header encoding (see RFC5987)
payload = payload.encode('iso-8859-1')

Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/notifications/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from urllib.parse import urlencode
from unittest import skip
from django.dispatch import receiver
from django.core.urlresolvers import reverse
from django.urls import reverse
from designsafe.apps.api.notifications.models import Notification
from .receivers import send_notification_ws

Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/notifications/views/api.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from django.http.response import HttpResponseBadRequest
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.shortcuts import render

from designsafe.apps.api.notifications.models import Notification
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/notifications/views/webhooks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.http.response import HttpResponseBadRequest
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.shortcuts import render
Expand Down
3 changes: 3 additions & 0 deletions designsafe/apps/api/projects/tests.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
from designsafe.apps.api.projects.fixtures import exp_instance_meta, exp_instance_resp, exp_entity_meta, exp_entity_json
import pytest

@pytest.mark.django_db
def test_project_instance_get(client, mock_agave_client, authenticated_user):
mock_agave_client.meta.getMetadata.return_value = exp_instance_meta
resp = client.get('/api/projects/1052668239654088215-242ac119-0001-012/')
actual = resp.json()
expected = exp_instance_resp
assert actual == expected

@pytest.mark.django_db
def test_project_meta_all(client, mock_agave_client, authenticated_user):
mock_agave_client.meta.getMetadata.return_value = exp_instance_meta
mock_agave_client.meta.listMetadata.return_value = exp_entity_meta
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/projects/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import logging
import json
from celery import group, chain
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.conf import settings
from django.http.response import HttpResponseForbidden
from django.http import JsonResponse, HttpResponseBadRequest
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/search/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.conf import settings
from django.core.urlresolvers import reverse
from django.urls import reverse
from designsafe.apps.api.search.views import SearchView
import json

Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/api/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import urllib.request, urllib.parse, urllib.error
from datetime import datetime
from celery import shared_task
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.contrib.auth import get_user_model
from pytas.models import User as TASUser
from django.conf import settings
Expand Down
4 changes: 2 additions & 2 deletions designsafe/apps/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.http import JsonResponse

urlpatterns = [
url(r'^projects/', include('designsafe.apps.api.projects.urls',
url(r'^projects/', include(('designsafe.apps.api.projects.urls', 'designsafe.apps.api.projects'),
namespace='ds_projects_api')),

url(r'^datafiles/', include('designsafe.apps.api.datafiles.urls')),
Expand All @@ -13,6 +13,6 @@
url(r'^logger/$', LoggerApi.as_view(), name='logger'),
url(r'^notifications/', include('designsafe.apps.api.notifications.urls')),
url(r'^users/', include('designsafe.apps.api.users.urls')),
url(r'^search/', include('designsafe.apps.api.search.urls', namespace="ds_search_api")),
url(r'^search/', include(('designsafe.apps.api.search.urls', 'designsafe.apps.api.search'), namespace="ds_search_api")),
url(r'^licenses/', include('designsafe.apps.api.licenses.urls'))
]
2 changes: 1 addition & 1 deletion designsafe/apps/applications/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf.urls import include, url
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from designsafe.apps.applications import views

Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/applications/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def call_api(request, service):
:param request: http request from angular service
:returns: JSON response for agave call
"""
if request.user.is_authenticated():
if request.user.is_authenticated:
try:
token = request.user.agave_oauth
agave = Agave(api_server=settings.AGAVE_TENANT_BASEURL,
Expand Down
3 changes: 2 additions & 1 deletion designsafe/apps/auth/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
from django.core.exceptions import ObjectDoesNotExist
from requests.exceptions import RequestException, HTTPError
import logging
from django.utils.deprecation import MiddlewareMixin

logger = logging.getLogger(__name__)


class AgaveTokenRefreshMiddleware(object):
class AgaveTokenRefreshMiddleware(MiddlewareMixin):

def process_request(self, request):
if request.path != '/logout/' and request.user.is_authenticated:
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/auth/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class Migration(migrations.Migration):
('refresh_token', models.CharField(max_length=255)),
('expires_in', models.BigIntegerField()),
('created', models.BigIntegerField()),
('user', models.OneToOneField(related_name='agave_oauth', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(related_name='agave_oauth', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
]
2 changes: 1 addition & 1 deletion designsafe/apps/auth/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
AGAVE_RESOURCES = agave.load_resource(getattr(settings, 'AGAVE_TENANT_BASEURL'))

class AgaveOAuthToken(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='agave_oauth')
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='agave_oauth', on_delete=models.CASCADE)
token_type = models.CharField(max_length=255)
scope = models.CharField(max_length=255)
access_token = models.CharField(max_length=255)
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/auth/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf.urls import include, url
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from designsafe.apps.auth import views

Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/auth/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import authenticate, login
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseRedirect, HttpResponseBadRequest
from django.shortcuts import render
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/box_integration/integrations.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.core.urlresolvers import reverse
from django.urls import reverse


def provide_integrations():
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/box_integration/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('access_token', models.CharField(max_length=255)),
('refresh_token', models.CharField(max_length=255)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
]
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='boxusertoken',
name='user',
field=models.OneToOneField(related_name='box_user_token', to=settings.AUTH_USER_MODEL),
field=models.OneToOneField(related_name='box_user_token', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
),
]
2 changes: 1 addition & 1 deletion designsafe/apps/box_integration/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class BoxUserToken(models.Model):
"""
Represents an OAuth Token for a Box.com user
"""
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='box_user_token')
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='box_user_token', on_delete=models.CASCADE)
box_user_id = models.CharField(max_length=48)
access_token = models.CharField(max_length=255)
refresh_token = models.CharField(max_length=255)
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/box_integration/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.test import TestCase
from django.contrib.auth import get_user_model, signals
from django.core.urlresolvers import reverse
from django.urls import reverse
from boxsdk.object.user import User
from designsafe.apps.box_integration.models import BoxUserToken
from designsafe.apps.auth.signals import on_user_logged_in
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/box_integration/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import (HttpResponseRedirect, HttpResponseBadRequest)
from django.shortcuts import render
from designsafe.apps.box_integration.models import BoxUserToken
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/cms_plugins/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='ResponsiveEmbedPlugin',
fields=[
('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE)),
('url', models.CharField(max_length=255)),
('aspect', models.CharField(max_length=255, choices=[(b'16by9', b'16by9'), (b'4by3', b'4by3'), (b'podcast', b'podcast')])),
],
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/dashboard/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from django.test import TestCase
from django.contrib.auth import get_user_model, signals
from django.contrib.auth.models import Permission
from django.core.urlresolvers import reverse
from django.urls import reverse
from designsafe.apps.data.models.elasticsearch import IndexedFile

logger = logging.getLogger(__name__)
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/dashboard/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf.urls import include, url
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from designsafe.apps.dashboard import views

Expand Down
1 change: 1 addition & 0 deletions designsafe/apps/data/management/commands/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def setUp(self):

@patch('designsafe.apps.data.management.commands.swap_reindex.Command.handle')
def test_working(self, mock_handle):
mock_handle.return_value='OK'
opts = {'index': 'files'}
call_command('swap_reindex', **opts)
self.assertEqual(mock_handle.call_count, 1)
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/data/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
DataDepotPublishedView,
DataDepotLegacyPublishedView
)
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _

urlpatterns = [
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/data/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from designsafe.apps.notifications.views import get_number_unread_notifications
from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import Http404, HttpResponse
from django.shortcuts import resolve_url
from django.utils.decorators import method_decorator
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/djangoRT/tests.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.contrib.auth import get_user_model, signals
from unittest import skip
import mock
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/djangoRT/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseBadRequest
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.urls import reverse
from designsafe.apps.djangoRT import rtUtil, forms, rtModels
from django.contrib.auth.decorators import login_required
from django.contrib import messages
Expand Down
2 changes: 1 addition & 1 deletion designsafe/apps/dropbox_integration/integrations.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.core.urlresolvers import reverse
from django.urls import reverse


def provide_integrations():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class Migration(migrations.Migration):
('dropbox_user_id', models.CharField(max_length=48)),
('access_token', models.CharField(max_length=255)),
('refresh_token', models.CharField(max_length=255)),
('user', models.OneToOneField(related_name='dropbox_user_token', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(related_name='dropbox_user_token', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
]
Loading
Loading