Skip to content

Commit 141646a

Browse files
authored
Merge pull request #119 from ambitioninc/chore/django4
Django4 compatibility
2 parents 5d3a74a + 8d98c4c commit 141646a

File tree

13 files changed

+27
-37
lines changed

13 files changed

+27
-37
lines changed

.github/workflows/tests.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ jobs:
1818
# AttributeError: module 'collections' has no attribute 'Callable'
1919
# https://github.com/nose-devs/nose/issues/1099
2020
django:
21-
- 'Django~=2.2.0'
22-
- 'Django~=3.0.0'
23-
- 'Django~=3.1.0'
2421
- 'Django~=3.2.0'
2522
- 'Django~=4.0.0'
2623
- 'Django~=4.1.0'
24+
- 'Django~=4.2.0'
2725
experimental: [false]
2826
# include:
2927
# - python: '3.9'
@@ -38,6 +36,8 @@ jobs:
3836
django: 'Django~=4.0.0'
3937
- python: '3.7'
4038
django: 'Django~=4.1.0'
39+
- python: '3.7'
40+
django: 'Django~=4.2.0'
4141
services:
4242
postgres:
4343
image: postgres:latest
@@ -69,7 +69,7 @@ jobs:
6969
env:
7070
DB_SETTINGS: >-
7171
{
72-
"ENGINE":"django.db.backends.postgresql_psycopg2",
72+
"ENGINE":"django.db.backends.postgresql",
7373
"NAME":"querybuilder",
7474
"USER":"postgres",
7575
"PASSWORD":"postgres",
@@ -78,7 +78,7 @@ jobs:
7878
}
7979
DB_SETTINGS2: >-
8080
{
81-
"ENGINE":"django.db.backends.postgresql_psycopg2",
81+
"ENGINE":"django.db.backends.postgresql",
8282
"NAME":"querybuilder2",
8383
"USER":"postgres",
8484
"PASSWORD":"postgres",

docs/release_notes.rst

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Release Notes
22
=============
33

4+
v3.1.0
5+
------
6+
* django 4.2 support
7+
48
v3.0.4
59
------
610
* Adjusted querybuilder select functionality to process json values as needed in the result set

manage.py

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#!/usr/bin/env python
22
import sys
33

4+
# Show warnings about django deprecations - uncomment for version upgrade testing
5+
import warnings
6+
from django.utils.deprecation import RemovedInNextVersionWarning
7+
warnings.filterwarnings('always', category=DeprecationWarning)
8+
warnings.filterwarnings('always', category=PendingDeprecationWarning)
9+
warnings.filterwarnings('always', category=RemovedInNextVersionWarning)
10+
411
from settings import configure_settings
512

613

querybuilder/__init__.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
11
# flake8: noqa
22
from .version import __version__
3-
4-
default_app_config = 'querybuilder.apps.QueryBuilderConfig'

querybuilder/tables.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import abc
1+
from abc import ABCMeta
22

33
from django.db.models.base import ModelBase
4-
from six import string_types, with_metaclass
54

65
import querybuilder
76
from querybuilder.fields import FieldFactory
@@ -31,7 +30,7 @@ def __new__(cls, table, *args, **kwargs):
3130
kwargs.update(alias=list(table.keys())[0])
3231
table = list(table.values())[0]
3332
table_type = type(table)
34-
if isinstance(table, string_types):
33+
if isinstance(table, str):
3534
return SimpleTable(table, **kwargs)
3635
elif issubclass(table_type, ModelBase):
3736
return ModelTable(table, **kwargs)
@@ -44,7 +43,7 @@ def __new__(cls, table, *args, **kwargs):
4443
return None
4544

4645

47-
class Table(with_metaclass(abc.ABCMeta, object)):
46+
class Table(object, metaclass=ABCMeta):
4847
"""
4948
Abstract table class that all table types extend.
5049
@@ -259,7 +258,7 @@ def add_fields(self, fields):
259258
or ``Field`` instance
260259
:type fields: str or tuple or list of str or list of Field or :class:`Field <querybuilder.fields.Field>`
261260
"""
262-
if isinstance(fields, string_types):
261+
if isinstance(fields, str):
263262
fields = [fields]
264263
elif type(fields) is tuple:
265264
fields = list(fields)

querybuilder/tests/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'querybuilder.tests.apps.QuerybuilderTestConfig'

querybuilder/tests/migrations/0001_initial.py

+2-11
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
11
# -*- coding: utf-8 -*-
22
# Generated by Django 1.9.1 on 2016-02-12 19:03
3-
from __future__ import unicode_literals
43

54
from querybuilder.tests.utils import get_postgres_version
65

76
# These migrations should only be run during tests and not in your installed app.
8-
try:
9-
if get_postgres_version() < (9, 4):
10-
raise ImportError('Invalid Postgres version')
11-
import django.contrib.postgres.fields.jsonb
12-
json_field = django.contrib.postgres.fields.jsonb.JSONField()
13-
except ImportError:
14-
import jsonfield.fields
15-
json_field = jsonfield.fields.JSONField()
167
from django.db import migrations, models
178
import django.db.models.deletion
189

@@ -38,7 +29,7 @@ class Migration(migrations.Migration):
3829
fields=[
3930
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
4031
('other_value', models.FloatField(default=0)),
41-
('data', json_field),
32+
('data', models.JSONField()),
4233
],
4334
),
4435
migrations.CreateModel(
@@ -63,7 +54,7 @@ class Migration(migrations.Migration):
6354
('field5', models.CharField(default=None, max_length=16, null=True)),
6455
('field6', models.CharField(max_length=16)),
6556
('field7', models.CharField(max_length=16)),
66-
('field8', json_field),
57+
('field8', models.JSONField()),
6758
('custom_field_name', models.CharField(max_length=16, null=True, default='foo', db_column='actual_db_column_name')),
6859
],
6960
),

querybuilder/tests/models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class Uniques(models.Model):
5454
field5 = models.CharField(max_length=16, null=True, default=None)
5555
field6 = models.CharField(max_length=16)
5656
field7 = models.CharField(max_length=16)
57-
field8 = JSONField(default={})
57+
field8 = JSONField(default=dict)
5858
custom_field_name = models.CharField(
5959
max_length=16, null=True, default='foo', db_column='actual_db_column_name'
6060
)

querybuilder/urls.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1 @@
1-
from django.conf.urls import patterns # pragma: no cover
2-
3-
4-
urlpatterns = patterns(
5-
'',
6-
) # pragma: no cover
1+
urlpatterns = [] # pragma: no cover

querybuilder/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '3.0.4'
1+
__version__ = '3.1.0'

requirements/requirements-testing.txt

-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,5 @@ six
44
psycopg2
55
django-nose>=1.4
66
django-dynamic-fixture
7-
jsonfield==0.9.20
8-
mock
97
coverage
108
flake8

requirements/requirements.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
Django>=2.2
1+
Django>=3.2
22
pytz>=2015.6
33
fleming>=0.6.0
4-
six

settings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ def configure_settings():
5151
settings.configure(
5252
TEST_RUNNER='django_nose.NoseTestSuiteRunner',
5353
NOSE_ARGS=['--nocapture', '--nologcapture', '--verbosity=1'],
54-
MIDDLEWARE_CLASSES=(),
5554
DATABASES={
5655
'default': db_config,
5756
'mock-second-database': db_config2,
@@ -65,4 +64,5 @@ def configure_settings():
6564
ROOT_URLCONF='querybuilder.urls',
6665
TIME_ZONE='UTC',
6766
USE_TZ=False,
67+
DEFAULT_AUTO_FIELD='django.db.models.AutoField',
6868
)

0 commit comments

Comments
 (0)