2023-08-11 18:24:58 +03:00
|
|
|
import sys
|
|
|
|
from pathlib import PurePath
|
|
|
|
|
2023-07-18 15:11:30 +03:00
|
|
|
# For backwards compatibility, we import JSONField to have it available for import via
|
|
|
|
# this compat module (https://github.com/graphql-python/graphene-django/issues/1428).
|
|
|
|
# Django's JSONField is available in Django 3.2+ (the minimum version we support)
|
|
|
|
from django.db.models import JSONField
|
|
|
|
|
|
|
|
|
2022-10-19 17:10:30 +03:00
|
|
|
class MissingType:
|
2021-03-02 21:46:35 +03:00
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
pass
|
2016-09-18 02:29:00 +03:00
|
|
|
|
2016-11-15 09:34:49 +03:00
|
|
|
|
2016-09-18 02:29:00 +03:00
|
|
|
try:
|
2017-06-23 14:48:32 +03:00
|
|
|
# Postgres fields are only available in Django with psycopg2 installed
|
|
|
|
# and we cannot have psycopg2 on PyPy
|
2019-04-30 12:02:23 +03:00
|
|
|
from django.contrib.postgres.fields import (
|
|
|
|
ArrayField,
|
|
|
|
HStoreField,
|
2023-08-06 01:47:00 +03:00
|
|
|
IntegerRangeField,
|
2019-04-30 12:02:23 +03:00
|
|
|
RangeField,
|
|
|
|
)
|
2017-06-23 14:48:32 +03:00
|
|
|
except ImportError:
|
2023-08-11 18:24:58 +03:00
|
|
|
IntegerRangeField, HStoreField, RangeField = (MissingType,) * 3
|
|
|
|
|
|
|
|
# For unit tests we fake ArrayField using JSONFields
|
|
|
|
if any(
|
|
|
|
PurePath(sys.argv[0]).match(p)
|
|
|
|
for p in [
|
|
|
|
"**/pytest",
|
|
|
|
"**/py.test",
|
|
|
|
"**/pytest/__main__.py",
|
|
|
|
]
|
|
|
|
):
|
|
|
|
|
|
|
|
class ArrayField(JSONField):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
if len(args) > 0:
|
|
|
|
self.base_field = args[0]
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
|
|
|
else:
|
|
|
|
ArrayField = MissingType
|