prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Use memcached with large_image
  Right now, large_image is using Python memory for caching per process (large_image logs `Using python for large_image caching` anytime we request tiles). This means the cache is not actually being used when serving tiles as each request comes in through a different process.
  
  We need to configure large_image to use Memcached:
  
  ```py
  large_image.config.setConfig('cache_backend', 'memcached')
  ```
  
  This requires a memcached server running somewhere - we may need this in both the django and celery services. My current impression is that different services (on different nodes/machines) cannot share a cache
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `django-rgd-imagery/setup.py`
  Content:
  ```
  1 from io import open as io_open
  2 import os
  3 from pathlib import Path
  4 
  5 from setuptools import find_packages, setup
  6 
  7 readme_file = Path(__file__).parent.parent / 'README.md'
  8 if readme_file.exists():
  9     with readme_file.open() as f:
  10         long_description = f.read()
  11 else:
  12     # When this is first installed in development Docker, README.md is not available
  13     long_description = ''
  14 
  15 __version__ = None
  16 filepath = os.path.dirname(__file__)
  17 version_file = os.path.join(filepath, '..', 'version.py')
  18 with io_open(version_file, mode='r') as fd:
  19     exec(fd.read())
  20 
  21 setup(
  22     name='django-rgd-imagery',
  23     version=__version__,
  24     description='',
  25     long_description=long_description,
  26     long_description_content_type='text/markdown',
  27     license='Apache 2.0',
  28     author='Kitware, Inc.',
  29     author_email='rgd@kitware.com',
  30     url='https://github.com/ResonantGeoData/ResonantGeoData',
  31     keywords='',
  32     classifiers=[
  33         'Development Status :: 3 - Alpha',
  34         'Environment :: Web Environment',
  35         'Framework :: Django :: 3.0',
  36         'Framework :: Django',
  37         'Intended Audience :: Developers',
  38         'License :: OSI Approved :: Apache Software License',
  39         'Operating System :: OS Independent',
  40         'Programming Language :: Python :: 3',
  41         'Programming Language :: Python :: 3.8',
  42         'Programming Language :: Python',
  43     ],
  44     python_requires='>=3.8',
  45     packages=find_packages(exclude=['client']),
  46     include_package_data=True,
  47     install_requires=[
  48         'bidict',
  49         'django-rgd',
  50         'large-image>=1.8.1.dev7',
  51         'large-image-source-gdal>=1.8.1.dev7',
  52         'large-image-source-pil>=1.8.1.dev7',
  53         'large-image-source-tiff>=1.8.1.dev7',
  54         'pyvips',
  55         'tifftools>=1.2.0',
  56         'numpy',
  57         'pystac>=1.1.0',
  58         'shapely',
  59     ],
  60     extras_require={
  61         'worker': [
  62             'kwarray>=0.5.10',
  63             'kwcoco',
  64             'kwimage[headless]>=0.6.7',
  65             'large-image-converter',
  66             'rasterio',
  67         ],
  68     },
  69 )
  70
  ```
  
  Path: `django-rgd-imagery/rgd_imagery/__init__.py`
  Content:
  ```
  1 from pkg_resources import DistributionNotFound, get_distribution
  2 
  3 try:
  4     __version__ = get_distribution('django-rgd-imagery').version
  5 except DistributionNotFound:
  6     # package is not installed
  7     __version__ = None
  8
  ```
  
  Path: `django-rgd/rgd/configuration/configuration.py`
  Content:
  ```
  1 from __future__ import annotations
  2 
  3 import logging
  4 import os
  5 import tempfile
  6 from typing import Type
  7 
  8 try:
  9     from composed_configuration import ComposedConfiguration, ConfigMixin
  10     from configurations import values
  11 except ImportError:
  12     raise ImportError(
  13         'Please install `django-composed-configuration` and `django-configurations` '
  14         'to use the configuration mixins. This can be done through the `configuration` '
  15         'extra when installing `django-rgd`.'
  16     )
  17 
  18 
  19 class GeoDjangoMixin(ConfigMixin):
  20     @staticmethod
  21     def before_binding(configuration: Type[ComposedConfiguration]):
  22         configuration.INSTALLED_APPS += ['django.contrib.gis']
  23 
  24         try:
  25             import osgeo
  26 
  27             configuration.GDAL_LIBRARY_PATH = osgeo.GDAL_LIBRARY_PATH
  28             configuration.GEOS_LIBRARY_PATH = osgeo.GEOS_LIBRARY_PATH
  29         except (ImportError, AttributeError):
  30             logging.warning(
  31                 'GDAL wheel not installed, skipping configuration. If you have not '
  32                 'installed GDAL manually, please install the wheel with the following command: '
  33                 'pip install --find-links https://girder.github.io/large_image_wheels GDAL'
  34             )
  35 
  36 
  37 class SwaggerMixin(ConfigMixin):
  38     REFETCH_SCHEMA_WITH_AUTH = True
  39     REFETCH_SCHEMA_ON_LOGOUT = True
  40     OPERATIONS_SORTER = 'alpha'
  41     DEEP_LINKING = True
  42 
  43 
  44 class ResonantGeoDataBaseMixin(GeoDjangoMixin, SwaggerMixin, ConfigMixin):
  45     @staticmethod
  46     def before_binding(configuration: ComposedConfiguration) -> None:
  47         configuration.MIDDLEWARE += [
  48             'crum.CurrentRequestUserMiddleware',
  49         ]
  50         configuration.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] += [
  51             'rest_framework.authentication.TokenAuthentication',
  52         ]
  53 
  54     # This cannot have a default value, since the password and database name are always
  55     # set by the service admin
  56     DATABASES = values.DatabaseURLValue(
  57         environ_name='DATABASE_URL',
  58         environ_prefix='DJANGO',
  59         environ_required=True,
  60         # Additional kwargs to DatabaseURLValue are passed to dj-database-url
  61         engine='django.contrib.gis.db.backends.postgis',
  62         conn_max_age=600,
  63     )
  64 
  65     CELERY_WORKER_SEND_TASK_EVENTS = True
  66 
  67     RGD_FILE_FIELD_PREFIX = values.Value(default=None)
  68     RGD_GLOBAL_READ_ACCESS = values.Value(default=False)
  69     RGD_AUTO_APPROVE_SIGN_UP = values.Value(default=False)
  70     RGD_AUTO_COMPUTE_CHECKSUMS = values.Value(default=False)
  71     RGD_STAC_BROWSER_LIMIT = values.Value(default=1000)
  72     RGD_TEMP_DIR = values.Value(default=os.path.join(tempfile.gettempdir(), 'rgd'))
  73     RGD_TARGET_AVAILABLE_CACHE = values.Value(default=2)
  74
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/django-rgd-imagery/rgd_imagery/__init__.py b/django-rgd-imagery/rgd_imagery/__init__.py
  --- a/django-rgd-imagery/rgd_imagery/__init__.py
  +++ b/django-rgd-imagery/rgd_imagery/__init__.py
  @@ -1,3 +1,7 @@
  +import logging
  +
  +from django.conf import settings
  +import large_image
   from pkg_resources import DistributionNotFound, get_distribution
   
   try:
  @@ -5,3 +9,22 @@
   except DistributionNotFound:
       # package is not installed
       __version__ = None
  +
  +
  +logger = logging.getLogger(__name__)
  +
  +# Set config options for large_image
  +if hasattr(settings, 'RGD_MEMCACHED_URL') and settings.RGD_MEMCACHED_URL:
  +    large_image.config.setConfig('cache_memcached_url', settings.RGD_MEMCACHED_URL)
  +    if (
  +        hasattr(settings, 'RGD_MEMCACHED_USERNAME')
  +        and settings.RGD_MEMCACHED_USERNAME
  +        and hasattr(settings, 'RGD_MEMCACHED_PASSWORD')
  +        and settings.RGD_MEMCACHED_PASSWORD
  +    ):
  +        large_image.config.setConfig('cache_memcached_username', settings.RGD_MEMCACHED_USERNAME)
  +        large_image.config.setConfig('cache_memcached_password', settings.RGD_MEMCACHED_PASSWORD)
  +    large_image.config.setConfig('cache_backend', 'memcached')
  +    logger.info('Configured for memcached.')
  +else:
  +    logger.info('Settings not properly configured for memcached.')
  diff --git a/django-rgd-imagery/setup.py b/django-rgd-imagery/setup.py
  --- a/django-rgd-imagery/setup.py
  +++ b/django-rgd-imagery/setup.py
  @@ -47,7 +47,7 @@
       install_requires=[
           'bidict',
           'django-rgd',
  -        'large-image>=1.8.1.dev7',
  +        'large-image[memcached]>=1.8.1.dev7',
           'large-image-source-gdal>=1.8.1.dev7',
           'large-image-source-pil>=1.8.1.dev7',
           'large-image-source-tiff>=1.8.1.dev7',
  diff --git a/django-rgd/rgd/configuration/configuration.py b/django-rgd/rgd/configuration/configuration.py
  --- a/django-rgd/rgd/configuration/configuration.py
  +++ b/django-rgd/rgd/configuration/configuration.py
  @@ -71,3 +71,6 @@
       RGD_STAC_BROWSER_LIMIT = values.Value(default=1000)
       RGD_TEMP_DIR = values.Value(default=os.path.join(tempfile.gettempdir(), 'rgd'))
       RGD_TARGET_AVAILABLE_CACHE = values.Value(default=2)
  +    RGD_MEMCACHED_USERNAME = values.Value(default=None)
  +    RGD_MEMCACHED_PASSWORD = values.Value(default=None)
  +    RGD_MEMCACHED_URL = values.Value(default=None)
  
verification_info: {"golden_diff": "diff --git a/django-rgd-imagery/rgd_imagery/__init__.py b/django-rgd-imagery/rgd_imagery/__init__.py\n--- a/django-rgd-imagery/rgd_imagery/__init__.py\n+++ b/django-rgd-imagery/rgd_imagery/__init__.py\n@@ -1,3 +1,7 @@\n+import logging\n+\n+from django.conf import settings\n+import large_image\n from pkg_resources import DistributionNotFound, get_distribution\n \n try:\n@@ -5,3 +9,22 @@\n except DistributionNotFound:\n     # package is not installed\n     __version__ = None\n+\n+\n+logger = logging.getLogger(__name__)\n+\n+# Set config options for large_image\n+if hasattr(settings, 'RGD_MEMCACHED_URL') and settings.RGD_MEMCACHED_URL:\n+    large_image.config.setConfig('cache_memcached_url', settings.RGD_MEMCACHED_URL)\n+    if (\n+        hasattr(settings, 'RGD_MEMCACHED_USERNAME')\n+        and settings.RGD_MEMCACHED_USERNAME\n+        and hasattr(settings, 'RGD_MEMCACHED_PASSWORD')\n+        and settings.RGD_MEMCACHED_PASSWORD\n+    ):\n+        large_image.config.setConfig('cache_memcached_username', settings.RGD_MEMCACHED_USERNAME)\n+        large_image.config.setConfig('cache_memcached_password', settings.RGD_MEMCACHED_PASSWORD)\n+    large_image.config.setConfig('cache_backend', 'memcached')\n+    logger.info('Configured for memcached.')\n+else:\n+    logger.info('Settings not properly configured for memcached.')\ndiff --git a/django-rgd-imagery/setup.py b/django-rgd-imagery/setup.py\n--- a/django-rgd-imagery/setup.py\n+++ b/django-rgd-imagery/setup.py\n@@ -47,7 +47,7 @@\n     install_requires=[\n         'bidict',\n         'django-rgd',\n-        'large-image>=1.8.1.dev7',\n+        'large-image[memcached]>=1.8.1.dev7',\n         'large-image-source-gdal>=1.8.1.dev7',\n         'large-image-source-pil>=1.8.1.dev7',\n         'large-image-source-tiff>=1.8.1.dev7',\ndiff --git a/django-rgd/rgd/configuration/configuration.py b/django-rgd/rgd/configuration/configuration.py\n--- a/django-rgd/rgd/configuration/configuration.py\n+++ b/django-rgd/rgd/configuration/configuration.py\n@@ -71,3 +71,6 @@\n     RGD_STAC_BROWSER_LIMIT = values.Value(default=1000)\n     RGD_TEMP_DIR = values.Value(default=os.path.join(tempfile.gettempdir(), 'rgd'))\n     RGD_TARGET_AVAILABLE_CACHE = values.Value(default=2)\n+    RGD_MEMCACHED_USERNAME = values.Value(default=None)\n+    RGD_MEMCACHED_PASSWORD = values.Value(default=None)\n+    RGD_MEMCACHED_URL = values.Value(default=None)\n", "issue": "Use memcached with large_image\nRight now, large_image is using Python memory for caching per process (large_image logs `Using python for large_image caching` anytime we request tiles). This means the cache is not actually being used when serving tiles as each request comes in through a different process.\r\n\r\nWe need to configure large_image to use Memcached:\r\n\r\n```py\r\nlarge_image.config.setConfig('cache_backend', 'memcached')\r\n```\r\n\r\nThis requires a memcached server running somewhere - we may need this in both the django and celery services. My current impression is that different services (on different nodes/machines) cannot share a cache\n", "before_files": [{"content": "from io import open as io_open\nimport os\nfrom pathlib import Path\n\nfrom setuptools import find_packages, setup\n\nreadme_file = Path(__file__).parent.parent / 'README.md'\nif readme_file.exists():\n    with readme_file.open() as f:\n        long_description = f.read()\nelse:\n    # When this is first installed in development Docker, README.md is not available\n    long_description = ''\n\n__version__ = None\nfilepath = os.path.dirname(__file__)\nversion_file = os.path.join(filepath, '..', 'version.py')\nwith io_open(version_file, mode='r') as fd:\n    exec(fd.read())\n\nsetup(\n    name='django-rgd-imagery',\n    version=__version__,\n    description='',\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    license='Apache 2.0',\n    author='Kitware, Inc.',\n    author_email='rgd@kitware.com',\n    url='https://github.com/ResonantGeoData/ResonantGeoData',\n    keywords='',\n    classifiers=[\n        'Development Status :: 3 - Alpha',\n        'Environment :: Web Environment',\n        'Framework :: Django :: 3.0',\n        'Framework :: Django',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: Apache Software License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.8',\n        'Programming Language :: Python',\n    ],\n    python_requires='>=3.8',\n    packages=find_packages(exclude=['client']),\n    include_package_data=True,\n    install_requires=[\n        'bidict',\n        'django-rgd',\n        'large-image>=1.8.1.dev7',\n        'large-image-source-gdal>=1.8.1.dev7',\n        'large-image-source-pil>=1.8.1.dev7',\n        'large-image-source-tiff>=1.8.1.dev7',\n        'pyvips',\n        'tifftools>=1.2.0',\n        'numpy',\n        'pystac>=1.1.0',\n        'shapely',\n    ],\n    extras_require={\n        'worker': [\n            'kwarray>=0.5.10',\n            'kwcoco',\n            'kwimage[headless]>=0.6.7',\n            'large-image-converter',\n            'rasterio',\n        ],\n    },\n)\n", "path": "django-rgd-imagery/setup.py"}, {"content": "from pkg_resources import DistributionNotFound, get_distribution\n\ntry:\n    __version__ = get_distribution('django-rgd-imagery').version\nexcept DistributionNotFound:\n    # package is not installed\n    __version__ = None\n", "path": "django-rgd-imagery/rgd_imagery/__init__.py"}, {"content": "from __future__ import annotations\n\nimport logging\nimport os\nimport tempfile\nfrom typing import Type\n\ntry:\n    from composed_configuration import ComposedConfiguration, ConfigMixin\n    from configurations import values\nexcept ImportError:\n    raise ImportError(\n        'Please install `django-composed-configuration` and `django-configurations` '\n        'to use the configuration mixins. This can be done through the `configuration` '\n        'extra when installing `django-rgd`.'\n    )\n\n\nclass GeoDjangoMixin(ConfigMixin):\n    @staticmethod\n    def before_binding(configuration: Type[ComposedConfiguration]):\n        configuration.INSTALLED_APPS += ['django.contrib.gis']\n\n        try:\n            import osgeo\n\n            configuration.GDAL_LIBRARY_PATH = osgeo.GDAL_LIBRARY_PATH\n            configuration.GEOS_LIBRARY_PATH = osgeo.GEOS_LIBRARY_PATH\n        except (ImportError, AttributeError):\n            logging.warning(\n                'GDAL wheel not installed, skipping configuration. If you have not '\n                'installed GDAL manually, please install the wheel with the following command: '\n                'pip install --find-links https://girder.github.io/large_image_wheels GDAL'\n            )\n\n\nclass SwaggerMixin(ConfigMixin):\n    REFETCH_SCHEMA_WITH_AUTH = True\n    REFETCH_SCHEMA_ON_LOGOUT = True\n    OPERATIONS_SORTER = 'alpha'\n    DEEP_LINKING = True\n\n\nclass ResonantGeoDataBaseMixin(GeoDjangoMixin, SwaggerMixin, ConfigMixin):\n    @staticmethod\n    def before_binding(configuration: ComposedConfiguration) -> None:\n        configuration.MIDDLEWARE += [\n            'crum.CurrentRequestUserMiddleware',\n        ]\n        configuration.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] += [\n            'rest_framework.authentication.TokenAuthentication',\n        ]\n\n    # This cannot have a default value, since the password and database name are always\n    # set by the service admin\n    DATABASES = values.DatabaseURLValue(\n        environ_name='DATABASE_URL',\n        environ_prefix='DJANGO',\n        environ_required=True,\n        # Additional kwargs to DatabaseURLValue are passed to dj-database-url\n        engine='django.contrib.gis.db.backends.postgis',\n        conn_max_age=600,\n    )\n\n    CELERY_WORKER_SEND_TASK_EVENTS = True\n\n    RGD_FILE_FIELD_PREFIX = values.Value(default=None)\n    RGD_GLOBAL_READ_ACCESS = values.Value(default=False)\n    RGD_AUTO_APPROVE_SIGN_UP = values.Value(default=False)\n    RGD_AUTO_COMPUTE_CHECKSUMS = values.Value(default=False)\n    RGD_STAC_BROWSER_LIMIT = values.Value(default=1000)\n    RGD_TEMP_DIR = values.Value(default=os.path.join(tempfile.gettempdir(), 'rgd'))\n    RGD_TARGET_AVAILABLE_CACHE = values.Value(default=2)\n", "path": "django-rgd/rgd/configuration/configuration.py"}], "after_files": [{"content": "from io import open as io_open\nimport os\nfrom pathlib import Path\n\nfrom setuptools import find_packages, setup\n\nreadme_file = Path(__file__).parent.parent / 'README.md'\nif readme_file.exists():\n    with readme_file.open() as f:\n        long_description = f.read()\nelse:\n    # When this is first installed in development Docker, README.md is not available\n    long_description = ''\n\n__version__ = None\nfilepath = os.path.dirname(__file__)\nversion_file = os.path.join(filepath, '..', 'version.py')\nwith io_open(version_file, mode='r') as fd:\n    exec(fd.read())\n\nsetup(\n    name='django-rgd-imagery',\n    version=__version__,\n    description='',\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    license='Apache 2.0',\n    author='Kitware, Inc.',\n    author_email='rgd@kitware.com',\n    url='https://github.com/ResonantGeoData/ResonantGeoData',\n    keywords='',\n    classifiers=[\n        'Development Status :: 3 - Alpha',\n        'Environment :: Web Environment',\n        'Framework :: Django :: 3.0',\n        'Framework :: Django',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: Apache Software License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.8',\n        'Programming Language :: Python',\n    ],\n    python_requires='>=3.8',\n    packages=find_packages(exclude=['client']),\n    include_package_data=True,\n    install_requires=[\n        'bidict',\n        'django-rgd',\n        'large-image[memcached]>=1.8.1.dev7',\n        'large-image-source-gdal>=1.8.1.dev7',\n        'large-image-source-pil>=1.8.1.dev7',\n        'large-image-source-tiff>=1.8.1.dev7',\n        'pyvips',\n        'tifftools>=1.2.0',\n        'numpy',\n        'pystac>=1.1.0',\n        'shapely',\n    ],\n    extras_require={\n        'worker': [\n            'kwarray>=0.5.10',\n            'kwcoco',\n            'kwimage[headless]>=0.6.7',\n            'large-image-converter',\n            'rasterio',\n        ],\n    },\n)\n", "path": "django-rgd-imagery/setup.py"}, {"content": "import logging\n\nfrom django.conf import settings\nimport large_image\nfrom pkg_resources import DistributionNotFound, get_distribution\n\ntry:\n    __version__ = get_distribution('django-rgd-imagery').version\nexcept DistributionNotFound:\n    # package is not installed\n    __version__ = None\n\n\nlogger = logging.getLogger(__name__)\n\n# Set config options for large_image\nif hasattr(settings, 'RGD_MEMCACHED_URL') and settings.RGD_MEMCACHED_URL:\n    large_image.config.setConfig('cache_memcached_url', settings.RGD_MEMCACHED_URL)\n    if (\n        hasattr(settings, 'RGD_MEMCACHED_USERNAME')\n        and settings.RGD_MEMCACHED_USERNAME\n        and hasattr(settings, 'RGD_MEMCACHED_PASSWORD')\n        and settings.RGD_MEMCACHED_PASSWORD\n    ):\n        large_image.config.setConfig('cache_memcached_username', settings.RGD_MEMCACHED_USERNAME)\n        large_image.config.setConfig('cache_memcached_password', settings.RGD_MEMCACHED_PASSWORD)\n    large_image.config.setConfig('cache_backend', 'memcached')\n    logger.info('Configured for memcached.')\nelse:\n    logger.info('Settings not properly configured for memcached.')\n", "path": "django-rgd-imagery/rgd_imagery/__init__.py"}, {"content": "from __future__ import annotations\n\nimport logging\nimport os\nimport tempfile\nfrom typing import Type\n\ntry:\n    from composed_configuration import ComposedConfiguration, ConfigMixin\n    from configurations import values\nexcept ImportError:\n    raise ImportError(\n        'Please install `django-composed-configuration` and `django-configurations` '\n        'to use the configuration mixins. This can be done through the `configuration` '\n        'extra when installing `django-rgd`.'\n    )\n\n\nclass GeoDjangoMixin(ConfigMixin):\n    @staticmethod\n    def before_binding(configuration: Type[ComposedConfiguration]):\n        configuration.INSTALLED_APPS += ['django.contrib.gis']\n\n        try:\n            import osgeo\n\n            configuration.GDAL_LIBRARY_PATH = osgeo.GDAL_LIBRARY_PATH\n            configuration.GEOS_LIBRARY_PATH = osgeo.GEOS_LIBRARY_PATH\n        except (ImportError, AttributeError):\n            logging.warning(\n                'GDAL wheel not installed, skipping configuration. If you have not '\n                'installed GDAL manually, please install the wheel with the following command: '\n                'pip install --find-links https://girder.github.io/large_image_wheels GDAL'\n            )\n\n\nclass SwaggerMixin(ConfigMixin):\n    REFETCH_SCHEMA_WITH_AUTH = True\n    REFETCH_SCHEMA_ON_LOGOUT = True\n    OPERATIONS_SORTER = 'alpha'\n    DEEP_LINKING = True\n\n\nclass ResonantGeoDataBaseMixin(GeoDjangoMixin, SwaggerMixin, ConfigMixin):\n    @staticmethod\n    def before_binding(configuration: ComposedConfiguration) -> None:\n        configuration.MIDDLEWARE += [\n            'crum.CurrentRequestUserMiddleware',\n        ]\n        configuration.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] += [\n            'rest_framework.authentication.TokenAuthentication',\n        ]\n\n    # This cannot have a default value, since the password and database name are always\n    # set by the service admin\n    DATABASES = values.DatabaseURLValue(\n        environ_name='DATABASE_URL',\n        environ_prefix='DJANGO',\n        environ_required=True,\n        # Additional kwargs to DatabaseURLValue are passed to dj-database-url\n        engine='django.contrib.gis.db.backends.postgis',\n        conn_max_age=600,\n    )\n\n    CELERY_WORKER_SEND_TASK_EVENTS = True\n\n    RGD_FILE_FIELD_PREFIX = values.Value(default=None)\n    RGD_GLOBAL_READ_ACCESS = values.Value(default=False)\n    RGD_AUTO_APPROVE_SIGN_UP = values.Value(default=False)\n    RGD_AUTO_COMPUTE_CHECKSUMS = values.Value(default=False)\n    RGD_STAC_BROWSER_LIMIT = values.Value(default=1000)\n    RGD_TEMP_DIR = values.Value(default=os.path.join(tempfile.gettempdir(), 'rgd'))\n    RGD_TARGET_AVAILABLE_CACHE = values.Value(default=2)\n    RGD_MEMCACHED_USERNAME = values.Value(default=None)\n    RGD_MEMCACHED_PASSWORD = values.Value(default=None)\n    RGD_MEMCACHED_URL = values.Value(default=None)\n", "path": "django-rgd/rgd/configuration/configuration.py"}]}