Mixins

The mixins are defined in kaio/mixins and inherit from Object. They are defined from a function that takes the name from the .ini (onwards app.ini) file section.

The params into the app.ini file are set without quotation marks, either are numbers, texts, strings, etc.

CachesMixin

This mixin allows us to configure the cache of our application. It is intended for use with Redis in production. If a cache type is not defined, it means that we have dummy cache.

from kaio.mixins import CachesMixin

Section: Cache

Parameters

CACHE_TYPE
cache type, by default locmem, options: locmem, redis, dummy
CACHE_REDIS_DB
redis database number that we’ll use as cache into redis. By default, 2.
CACHE_REDIS_PASSWORD
Password for redis. By default without password.
REDIS_HOST
redis host name. By default localhost
REDIS_PORT
port of the redis server. By default 6379
CACHE_PREFIX
prefix to use in the cache keys for the projecte. By default is the project SLUG.
CACHE_TIMEOUT
Cache expiration time. By default 3600 seconds, 1 hour.
CACHE_MAX_ENTRIES
Maximum number of cached entries. By default 10000.

CachesMixin also allows to configure the cache for sessions. You must set SESSION_ENGINE = 'django.contrib.sessions.backends.cache' or '.cached_db'. By default use almost same settings as default cache.

SESSION_CACHE_TYPE
cache type, by default CACHE_TYPE, options: redis
SESSION_CACHE_REDIS_DB
redis database number that we’ll use as cache into redis. By default, 3.
SESSION_CACHE_REDIS_PASSWORD
Password for redis. By default without password.
SESSION_REDIS_HOST
redis host name. By default REDIS_HOST
SESSION_REDIS_PORT
port of the redis server. By default REDIS_PORT
SESSION_CACHE_PREFIX
prefix to use in the cache keys for the projecte. By default CACHE_PREFIX_session.
SESSION_CACHE_TIMEOUT
Cache expiration time. By default None (no timeout).
SESSION_CACHE_MAX_ENTRIES
Maximum number of cached entries. By default 1000000.
SESSION_CACHE_ALIAS
Selects the cache to use for sessions. By default sessions.

CeleryMixin

This mixin allows us to configure Celery in case we use it in our application.

from kaio.mixins import CeleryMixin

Section: Celery

Parameters

CELERY_DISABLE_RATE_LIMITS
True
CELERYBEAT_SCHEDULER
django_celery_beat.schedulers:DatabaseScheduler
CELERY_DEFAULT_QUEUE
Default: celery.
CELERY_RESULT_BACKEND
Default redis://{REDIS_HOST}:{REDIS_PORT}/{CELERY_REDIS_RESULT_DB} if Redis is available, else None.
CELERY_IGNORE_RESULT
Default False.
CELERY_RESULT_EXPIRES
Default: 86400 (1 day in seconds).
CELERY_MAX_CACHED_RESULTS
Default 5000.
CELERY_CACHE_BACKEND
Default: default
CELERY_ALWAYS_EAGER
Default False.
CELERY_EAGER_PROPAGATES_EXCEPTIONS
Default True.
CELERY_REDIS_RESULT_DB
Default 0.
CELERY_REDIS_BROKER_DB
Default 0.
RABBITMQ_HOST
Default localhost.
RABBITMQ_PORT
Default 5672.
RABBITMQ_USER
Default guest.
RABBITMQ_PASSWD
Default guest.
RABBITMQ_VHOST
Default /.
BROKER_TYPE
Default redis.
BROKER_URL
  • Default for Redis: redis://{REDIS_HOST}:{REDIS_PORT}/{CELERY_REDIS_RESULT_DB}.
  • Default for RabbitMQ: amqp://{RABBITMQ_USER}:{RABBITMQ_PASSWD}@{RABBITMQ_HOST}:{RABBITMQ_PORT}/{RABBITMQ_VHOST}
  • Default for others: django://.

CmsMixin

Warning

Deprecated mixin

Mixin that helps us to get the languages configured on the project.

from kaio.mixins import CMSMixin

Section: Compress

Parameters

CompressMixin

django-compressor configuration.

from kaio.mixins import CompressMixin

Section: Compress

Parameters

COMPRESS_DEBUG_TOGGLE
by default nocompress in DEBUG mode.
COMPRESS_ENABLED
by default False.
COMPRESS_CSS_HASHING_METHOD
by default content.
COMPRESS_LESSC_ENABLED
by default True.
COMPRESS_SASS_ENABLED
by default True.
COMPRESS_BABEL_ENABLED
by default False.
COMPRESS_LESSC_PATH
by default lessc.
COMPRESS_SASS_PATH
by default node-sass.
COMPRESS_BABEL_PATH
by default babel.
COMPRESS_PRECOMPILERS
by default includes automatically less, babel and coffeescript if they are active.
COMPRESS_OUTPUT_DIR
by default CACHE/.
COMPRESS_OFFLINE
by default False.
COMPRESS_OFFLINE_TIMEOUT
by default 31536000 (1 year in seconds).
COMPRESS_OFFLINE_MANIFEST
by default manifest.json.

Static offline compression

In order to be able to use it you have to follow two steps:

  • add COMPRESS_OFFLINE = True to app.ini file
  • the {% compress js/css %} can not have any django logic, no vars, no templatetags, no subblocks…

This last step is advisable to follow it as a good practice just in case in any future moment we want the COMPRESS_OFFLINE feature.

Example of the [Compress] section with compress activated and compress offline activated. LESS, SASS and BABEL suport are active by default:

...
[Compress]
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
...

The idea is to have COMPRESS_OFFLINE = False in development environment and to have COMPRESS_OFFLINE = True once we deploy the project to production environment.

In order to test it in development environment you have to execute

python manage.py collectstatic

and then

python manage.py compress

DatabaseMixin

Database access configuration.

from kaio.mixins import DatabasesMixin

Section: Database

Parameters

DATABASE_ENGINE
by default sqlite3, allow sqlite3, postgresql_psycopg2, mysql, oracle
DATABASE_NAME
default name, if we use sqlite3 it will be db.sqlite
DATABASE_USER
user to use
DATABASE_PASSWORD
password
DATABASE_HOST
host name
DATABASE_PORT
port number
DATABASE_CONN_MAX_AGE
by default 0.
DATABASE_OPTIONS_OPTIONS
string to add to database options setting. Empty by default. Example to change the postgresql schema: DATABASE_OPTIONS_OPTIONS = -c search_path=some_schema

DebugMixin

This mixin allows us to define and work with the debug parameters and configure django-debug-toolbar to be used in our application. Therefore its use depends on whether this module is configured in the requirements.txt of the project, otherwise we will not have activated the option of the debug toolbar.

from kaio.mixins import DebugMixin

Section: Debug

Parameters

DEBUG
by default False.
TEMPLATE_DEBUG
by default same as DEBUG.
ENABLE_DEBUG_TOOLBAR
by default same as DEBUG. False if the module is not installed.
INTERNAL_IPS
Debug Toolbar is shown only if your IP is listed in the INTERNAL_IPS setting. CSV of IPs , by default 127.0.0.1. If ENABLE_DEBUG_TOOLBAR is True it automatically appends IPs for showing the toolbar inside contaniers. https://django-debug-toolbar.readthedocs.io/en/stable/installation.html#configure-internal-ips

EmailMixin

Set the basic parameters by default to configure the mail. In its configuration by default allows us to operate with django-yubin, leaving its final configuration for the production environment.

from kaio.mixins import EmailMixin

Section: Email

Parameters

DEFAULT_FROM_EMAIL
by default Example <info@example.com>.
EMAIL_BACKEND
by default django.core.mail.backends.smtp.EmailBackend, django_yubin.smtp_queue.EmailBackend or django_yubin.backends.QueuedEmailBackend if django_yubin is installed and its version.
EMAIL_FILE_PATH
by default None.
EMAIL_HOST
by default localhost.
EMAIL_HOST_PASSWORD
by default ''.
EMAIL_HOST_USER
by default ''.
EMAIL_PORT
by default 25.
EMAIL_SUBJECT_PREFIX
Prefix to add to Django’s subject. By default [Django]
EMAIL_USE_TLS
by default False.
MAILER_PAUSE_SEND
by default False.
MAILER_USE_BACKEND
by default django.core.mail.backends.smtp.EmailBackend.
MAILER_HC_QUEUED_LIMIT_OLD
If there are emails created, enqueued or in progress for more than x minutes, Yubin HealthCheck view will show an error. By default 30.
MAILER_STORAGE_BACKEND
by default django_yubin.storage_backends.DatabaseStorageBackend.
MAILER_STORAGE_DELETE
by default True.
MAILER_FILE_STORAGE_DIR
by default yubin.

Following settings are deprecated, they exist for backwards compatibility.

MAILER_MAIL_ADMINS_PRIORITY
by default None.
MAILER_MAIL_MANAGERS_PRIORITY
by default None.
MAILER_EMPTY_QUEUE_SLEEP
by default 30.
MAILER_LOCK_WAIT_TIMEOUT
by default 0.
MAILER_LOCK_PATH
by default os.path.join(self.APP_ROOT, "send_mail").

Recall that in order to use django_yubin we must configure the cron.

FilerMixin

Todo

FilerMixin - Complete description

from kaio.mixins import FilerMixin

Section: Filer

Parameters

FILER_IS_PUBLIC_DEFAULT
Default True.
FILER_ENABLE_PERMISSIONS
Default False.
FILER_DEBUG
Default False.
FILER_ENABLE_LOGGING
Default False.
FILER_0_8_COMPATIBILITY_MODE
Default False.
THUBMNAIL_DEBUG
Default False.
THUMBNAIL_QUALITY
Default 85.
FILER_CUSTOM_NGINX_SERVER
Default False.
DEFAULT_FILE_STORAGE
Default django.core.files.storage.FileSystemStorage.
FILER_CUSTOM_SECURE_MEDIA_ROOT
Default filer_private.

LogsMixin

Mixin that handles the configuration the Django logs. Established some default configurations that we use in our development and production environments for the project configuration.

from kaio.mixins import LogsMixin

Section: Logs

Parameters

LOG_LEVEL
sets the project logging level. By default: DEBUG
DJANGO_LOG_LEVEL
sets the django logging level. By default: ERROR
LOG_FILE
name of the log file. No established by default, usually specified in production.
EXTRA_LOGGING
parameter that sets the log level at module level in a easy way. It does not have a default value. As a parameter we have to set a module list with the differents levels to log each separated by comma in the followinf format: <module>:log_value E.g.:
[Logs]
EXTRA_LOGGING = oscar.paypal:DEBUG, django.db:INFO
LOG_FORMATTER_FORMAT
by default [%(asctime)s] %(levelname)s %(name)s-%(lineno)s %(message)s. This option is not interpolated, see https://docs.python.org/3/library/configparser.html#interpolation-of-values
LOG_FORMATTER_CLASS
custom formatter class. By default no formatter class is used.
LOG_FORMATTER_EXTRA_FIELDS
optional extra fields passed to the logger formatter class.

SentryMixin

Only adds the Django integration. You can change this overwriting the integrations() method. In case you need more low-level control, you can overwrite the sentry_init() method.

from kaio.mixins import SentryMixin
SENTRY_DSN
The DSN to configure Sentry. If blank, Sentry integration is not initialized. By default ''.
SENTRY_IGNORE_LOGGERS
CSV of loggers to don’t send to Sentry. By default 'django.security.DisallowedHost'.

PathsMixin

Paths base settings.

from kaio.mixins import PathsMixin

Section: Paths

Parameters

APP_ROOT
By default the current directory, abspath('.').
MEDIA_ROOT
By default the current APP_ROOT + /media.
STATIC_URL
By default /static/.
MEDIA_URL
By default /media/.
STATIC_ROOT
By default abspath(join("/tmp", "{}-static".format(self.APP_SLUG)).

SecurityMixin

Security base settings.

from kaio.mixins import SecurityMixin

Section: Security

Parameters

SECRET_KEY
A secret key for a particular Django installation. This is used to provide cryptographic signing, and should be set to a unique, unpredictable value. By default ''.
ALLOWED_HOSTS
A list of strings representing the host/domain names that this Django site can serve. By default [].
SECURE_PROXY_SSL_HEADER_NAME
user to use The name of the header to configure the proxy ssl. By default HTTP_X_FORWARDED_PROTO
SECURE_PROXY_SSL_HEADER_VALUE
The value of the header to configure the proxy ssl. By default https
SECURE_PROXY_SSL_HEADER
A tuple representing a HTTP header/value combination that signifies a request is secure. This controls the behavior of the request object’s is_secure() method. By default returns the tuple of the combination of the SECURE_PROXY_SSL_HEADER_NAME and SECURE_PROXY_SSL_HEADER_VALUE. https://docs.djangoproject.com/en/1.10/ref/settings/#secure-proxy-ssl-header

StorageMixin

Mixin that provides settings for django-storages. Currently only supports AWS S3. Look at http://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html for details.

from kaio.mixins import StorageMixin

Section: Storage

Parameters

DEFAULT_FILE_STORAGE
By default: storages.backends.s3boto3.S3Boto3Storage. For tests it might be convenient to change it to django.core.files.storage.FileSystemStorage. Only in Django versions < 4.2.
DEFAULT_BACKEND_STORAGE
By default: storages.backends.s3boto3.S3Boto3Storage. For tests it might be convenient to change it to django.core.files.storage.FileSystemStorage. Only in Django versions >= 4.2.
STATICFILES_BACKEND_STORAGE
By default: ``django.contrib.staticfiles.storage.StaticFilesStorage``Only in Django versions >= 4.2.
AWS_S3_SIGNATURE_VERSION
By default s3v4.
AWS_S3_REGION_NAME
By default None. Example: eu-west-1.
AWS_S3_ENDPOINT_URL
By default None.
AWS_S3_CUSTOM_DOMAIN
By default None.
AWS_STORAGE_BUCKET_NAME
By default ''.
AWS_LOCATION
By default ''.
AWS_ACCESS_KEY_ID
By default ''.
AWS_SECRET_ACCESS_KEY
By default ''.
AWS_QUERYSTRING_AUTH
By default True.
AWS_DEFAULT_ACL
By default private.

WhiteNoiseMixin

Automatic configuration for static serving using whitenoise. You must have version 3 installed.

from kaio.mixins import WhiteNoiseMixin

Parameters

ENABLE_WHITENOISE
by default False. False if the module is not installed.
WHITENOISE_AUTOREFRESH
by default True.
WHITENOISE_USE_FINDERS
by default True.