import sys from pathlib import PurePath # 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 class MissingType: def __init__(self, *args, **kwargs): pass try: # Postgres fields are only available in Django with psycopg2 installed # and we cannot have psycopg2 on PyPy from django.contrib.postgres.fields import ( ArrayField, HStoreField, IntegerRangeField, RangeField, ) except ImportError: 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