From 90ac846f3bfea0502550389f06ccffd470f6ed6c Mon Sep 17 00:00:00 2001 From: Fawad Qureshi Date: Wed, 14 Apr 2021 22:55:03 +0300 Subject: [PATCH] updated for django 3.x --- README.md | 4 ++-- activflow/core/models.py | 13 +++++++------ activflow/core/templatetags/core_tags.py | 4 ++-- activflow/core/views.py | 2 +- activflow/settings/base.py | 7 +++---- activflow/settings/staging.py | 1 + activflow/tests/models.py | 7 ++++--- activflow/tests/tests.py | 3 ++- activflow/urls.py | 2 +- docker-compose.yml | 2 ++ requirements.txt | 8 ++++---- 11 files changed, 29 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index b4b0441..021393a 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ What is an ActivFlow workflow? ![alt tag](https://user-images.githubusercontent.com/6130967/28086399-5625a4e8-6698-11e7-8a00-ccf3180d70be.png) ### Technology Stack -- Python 2.7x, 3.4x, 3.5x, 3.6x -- Django 1.9x, 1.10x, 1.11x +- Python 3.5+ +- Django 3.x - Bootstrap 3.x ### Usage & Configuration diff --git a/activflow/core/models.py b/activflow/core/models.py index f3e83c8..050788c 100644 --- a/activflow/core/models.py +++ b/activflow/core/models.py @@ -6,7 +6,8 @@ CharField, DateTimeField, OneToOneField, - ForeignKey) + ForeignKey, + CASCADE) from activflow.core.constants import ( REQUEST_STATUS, @@ -55,7 +56,7 @@ def __unicode__(self): class Request(AbstractEntity): """Defines the workflow request""" - requester = ForeignKey(User, related_name='requests') + requester = ForeignKey(User, related_name='requests', on_delete=CASCADE) module_ref = CharField(max_length=100) status = CharField( verbose_name="Status", max_length=30, choices=REQUEST_STATUS) @@ -63,9 +64,9 @@ class Request(AbstractEntity): class Task(AbstractEntity): """Defines the workflow task""" - request = ForeignKey(Request, related_name='tasks') - assignee = ForeignKey(Group) - updated_by = ForeignKey(User) + request = ForeignKey(Request, related_name='tasks', on_delete=CASCADE) + assignee = ForeignKey(Group, on_delete=CASCADE) + updated_by = ForeignKey(User, on_delete=CASCADE) activity_ref = CharField(max_length=100) status = CharField( verbose_name="Status", max_length=30, choices=TASK_STATUS) @@ -167,7 +168,7 @@ def rollback(self): class AbstractActivity(AbstractEntity): """Common attributes for all activities""" - task = OneToOneField(Task, null=True) + task = OneToOneField(Task, null=True, on_delete=CASCADE) class Meta(object): abstract = True diff --git a/activflow/core/templatetags/core_tags.py b/activflow/core/templatetags/core_tags.py index 6112ed3..6a887de 100644 --- a/activflow/core/templatetags/core_tags.py +++ b/activflow/core/templatetags/core_tags.py @@ -24,7 +24,7 @@ def label_with_class(value, arg): return value.label_tag(attrs={'class': arg}) -@register.assignment_tag(takes_context=True) +@register.simple_tag(takes_context=True) def activity_data(context, instance, option, _type): """Returns activity data as in field/value pair""" app = context['app_title'] @@ -95,7 +95,7 @@ def get_all_fields(instance, exclude=None): return related_model_fields -@register.assignment_tag(takes_context=True) +@register.simple_tag(takes_context=True) def wysiwyg_form_fields(context): """Returns activity data as in field/value pair""" app = context['app_title'] diff --git a/activflow/core/views.py b/activflow/core/views.py index b55dda7..027bac9 100644 --- a/activflow/core/views.py +++ b/activflow/core/views.py @@ -2,7 +2,7 @@ from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin -from django.core.urlresolvers import reverse, reverse_lazy +from django.urls import reverse, reverse_lazy from django.db import transaction from django.http import HttpResponseRedirect from django.shortcuts import render diff --git a/activflow/settings/base.py b/activflow/settings/base.py index f13821c..c451a40 100644 --- a/activflow/settings/base.py +++ b/activflow/settings/base.py @@ -4,7 +4,7 @@ SECRET_KEY = 'test_s*kbi04s%5u921e+d52kaa(e=d)%i4w@s6a6u8-x&bij^l8!q-' -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['activflow'] # Application definition @@ -20,15 +20,14 @@ 'activflow.tests' ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( + 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'django.middleware.security.SecurityMiddleware', ) ROOT_URLCONF = 'activflow.urls' diff --git a/activflow/settings/staging.py b/activflow/settings/staging.py index 00c17b7..58c0825 100644 --- a/activflow/settings/staging.py +++ b/activflow/settings/staging.py @@ -9,6 +9,7 @@ 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', + 'PASSWORD': 'password', 'HOST': 'db', 'PORT': 5432, } diff --git a/activflow/tests/models.py b/activflow/tests/models.py index 1710a11..914cb20 100644 --- a/activflow/tests/models.py +++ b/activflow/tests/models.py @@ -4,7 +4,8 @@ CharField, ForeignKey, IntegerField, - TextField) + TextField, + CASCADE) from activflow.core.models import ( AbstractEntity, @@ -28,7 +29,7 @@ def clean(self): class FooLineItem(AbstractEntity): """Sample representation of Foo Line Item""" - foo = ForeignKey(Foo, related_name="lines") + foo = ForeignKey(Foo, related_name="lines", on_delete=CASCADE) plugh = CharField( "Plugh", max_length=200, validators=[validate_initial_cap]) thud = CharField(verbose_name="Thud", max_length=30, choices=( @@ -46,7 +47,7 @@ def clean(self): class FooMoreLineItem(AbstractEntity): """Sample representation of FooMore Line Item""" - foo = ForeignKey(Foo, related_name="morelines") + foo = ForeignKey(Foo, related_name="morelines", on_delete=CASCADE) plughmore = CharField( "Plughmore", max_length=200, validators=[validate_initial_cap]) thudmore = CharField(verbose_name="Thudmore", max_length=30, choices=( diff --git a/activflow/tests/tests.py b/activflow/tests/tests.py index d385b4f..da48f74 100644 --- a/activflow/tests/tests.py +++ b/activflow/tests/tests.py @@ -1,6 +1,7 @@ """Tests for Core app""" from django.contrib.auth.models import User, Group -from django.core.urlresolvers import reverse +from django.urls import reverse + from django.test import TestCase from django.test import Client diff --git a/activflow/urls.py b/activflow/urls.py index 9f2b336..4870d3f 100644 --- a/activflow/urls.py +++ b/activflow/urls.py @@ -5,7 +5,7 @@ urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), url(r'^auth/', include('django.contrib.auth.urls')), url(r'', include('activflow.core.urls')), ] diff --git a/docker-compose.yml b/docker-compose.yml index 0abde42..ef9dbf8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,8 @@ services: db: image: postgres hostname: db + environment: + - POSTGRES_PASSWORD=password networks: activflow-net: app: diff --git a/requirements.txt b/requirements.txt index dc43dd7..e63d572 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==1.9 -gunicorn==19.6.0 -psycopg2==2.7.5 -django_extensions==1.7.9 \ No newline at end of file +Django==3.2 +gunicorn==20.1.0 +psycopg2==2.8.6 +django_extensions==3.1.2 \ No newline at end of file