def install_cacheops(): """ Installs cacheops by numerous monkey patches """ global installed if installed: return # just return for now, second call is probably done due cycle imports installed = True monkey_mix(Manager, ManagerMixin) monkey_mix(QuerySet, QuerySetMixin) monkey_mix(ValuesQuerySet, QuerySetMixin, ['iterator']) monkey_mix(ValuesListQuerySet, QuerySetMixin, ['iterator']) monkey_mix(DateQuerySet, QuerySetMixin, ['iterator']) # Install profile and signal handlers for any earlier created models from django.db.models import get_models for model in get_models(include_auto_created=True): model._default_manager._install_cacheops(model) # Turn off caching in admin from django.conf import settings if 'django.contrib.admin' in settings.INSTALLED_APPS: from django.contrib.admin.options import ModelAdmin def ModelAdmin_queryset(self, request): return o_ModelAdmin_queryset(self, request).nocache() o_ModelAdmin_queryset = ModelAdmin.queryset ModelAdmin.queryset = ModelAdmin_queryset # bind m2m changed handler m2m_changed.connect(invalidate_m2m)
def install_cacheops(): """ Installs cacheops by numerous monkey patches """ monkey_mix(Manager, ManagerMixin) monkey_mix(QuerySet, QuerySetMixin) monkey_mix(ValuesQuerySet, QuerySetMixin, ['iterator']) monkey_mix(ValuesListQuerySet, QuerySetMixin, ['iterator']) monkey_mix(DateQuerySet, QuerySetMixin, ['iterator']) # Install profile and signal handlers for any earlier created models from django.db.models import get_models for model in get_models(include_auto_created=True): model._default_manager._install_cacheops(model) # Turn off caching in admin from django.contrib.admin.options import ModelAdmin def ModelAdmin_queryset(self, request): queryset = o_ModelAdmin_queryset(self, request) if queryset._cacheprofile is None: return queryset else: return queryset.nocache() o_ModelAdmin_queryset = ModelAdmin.queryset ModelAdmin.queryset = ModelAdmin_queryset # bind m2m changed handler m2m_changed.connect(invalidate_m2m)
def ready(self): from graphene_django.converter import convert_django_field from nautobot.core.graphql import BigInteger @convert_django_field.register(JSONField) def convert_json(field, registry=None): """Convert JSONField to GenericScalar.""" return generic.GenericScalar() @convert_django_field.register(BinaryField) def convert_binary(field, registry=None): """Convert BinaryField to String.""" return String() @convert_django_field.register(BigIntegerField) def convert_biginteger(field, registry=None): """Convert BigIntegerField to BigInteger scalar.""" return BigInteger() post_migrate.connect(post_migrate_send_nautobot_database_ready, sender=self) super().ready() # Magical monkey-patch TaggableManager to replace the `formfield()` method from our mixin. from cacheops.utils import monkey_mix from nautobot.extras.models import mixins from taggit.managers import TaggableManager monkey_mix(TaggableManager, mixins.TaggableManagerMonkeyMixin)
def install_cacheops(): """ Installs cacheops by numerous monkey patches """ monkey_mix(Manager, ManagerMixin) monkey_mix(QuerySet, QuerySetMixin) monkey_mix(ValuesQuerySet, QuerySetMixin, ['iterator']) monkey_mix(ValuesListQuerySet, QuerySetMixin, ['iterator']) monkey_mix(DateQuerySet, QuerySetMixin, ['iterator']) # Turn off caching in admin from django.contrib.admin.options import ModelAdmin def ModelAdmin_queryset(self, request): queryset = o_ModelAdmin_queryset(self, request) if queryset._cacheprofile is None: return queryset else: return queryset.nocache() o_ModelAdmin_queryset = ModelAdmin.queryset ModelAdmin.queryset = ModelAdmin_queryset # bind m2m changed handler m2m_changed.connect(invalidate_m2m)