Skip to main content

Library to auto setup apphooks

Project description

Latest PyPI version Monthly downloads Python versions Latest Travis CI build status Test coverage Test coverage Code Climate

Utility function to auto setup apphooks on project startup.

Supported Django versions:

  • Django 1.6

  • Django 1.7

  • Django 1.8

Supported django CMS versions:

  • django CMS 3.x

Features

The mixin included in this utility allows to automatically add an Apphook to a django CMS project on the first access to the website.

This is intended for use by the django CMS application developers by extending their own CMSApp classes.

This behavior simplify the initial setup of a project and lower the barrier for the end user.

The setup function included here does the following:

  • Check if the Apphook is already added to a CMS page

  • If it is, it skips any further step

  • If not:

    • Creates the home page (if not present)

    • Creates a sub page of the home

    • Adds the application Apphook to it

In case the application uses aldryn-apphooks-config, a Apphook Config instance is created and added to the application page together with the Apphook.

Usage

This utility can be used by extending the CMSApp class, adding the auto_setup attribute with relevant configuration options and triggering setup at the end of cms_app.py:

class App4(AutoCMSAppMixin, CMSConfigApp):
    name = _('App4')
    urls = ['sample_app_4.urls']
    app_name = 'app4'
    app_config = App4Config
    # djangocms-apphook-setup attribute
    auto_setup = {
        'enabled': True,
        'home title': 'home title',
        'page title': 'page 4 title',
        'namespace': 'namespace',
        'config_fields': {'random_option': True},
        'config_translated_fields': {'app_title': 'app title', 'object_name': 'name'},
    }

apphook_pool.register(App4)
# trigger djangocms-apphook-setup function
App4.setup()

Customizing ApphookConfig instances creation

While config_fields and config_translated_fields should cover most use cases when it comes to ApphookConfig instances creation, you may need more control over the process.

For this, it’s possible to override AutoCMSAppMixin._create_config and AutoCMSAppMixin._create_config_translation.

Default implementation:

@classmethod
def _create_config(cls):
    return cls.app_config.objects.create(
        namespace=cls.auto_setup['namespace'], **cls.auto_setup['config_fields']
    )

@classmethod
def _create_config_translation(cls, config, lang):
    config.set_current_language(lang, initialize=True)
    for field, data in cls.auto_setup['config_translated_fields'].items():
        setattr(config, field, data)
    config.save_translations()

You can completely redefine the methods, provided you return an ApphookConfig instance in _create_config.

Configuration options

The behavior of the setup function can be customized by setting the following keys in the auto_setup attribute:

  • enabled: If True the setup is invoked; a good option is to use a setting to control this to allow application users to disable the behavior (default: True)

  • home title: Title of the home page if created by the setup function; this must be set in the application CMSApp, otherwise the setup function will exit with a warning.

  • page title: Title of the page created by the setup function; this must be set in the application CMSApp, otherwise the setup function will exit with a warning.

  • namespace: Application instance name used when attaching the Apphook; this must be set in the application CMSApp if an app_name is defined, otherwise the setup function will exit with a warning.

  • config_fields: Fields used when creating the ApphookConfigModel instance; use this attribute for non-translated fields.

  • config_translated_fields: Fields used when creating the ApphookConfigModel instance; use this attribute for translated fields (currently only django-parler is supported).

Notes on testing

As this utility works by triggering setup function at import time, extra steps must be taken in the tests to unload the modules between the tests (this is only needed when testing the setup).

Example cleanup to be included in setUp method:

def setUp(self):
    super(SetupAppBaseTest, self).setUp()
    from cms.apphook_pool import apphook_pool

    delete = [
        'my_app',
        'my_app.cms_app',
    ]
    for module in delete:
        if module in sys.modules:
            del sys.modules[module]
    MyApphoolConfigModel.cmsapp = None
    apphook_pool.clear()

History

0.1.0 (2015-10-24)

  • First experimental release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

djangocms-apphook-setup-0.1.1.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

djangocms_apphook_setup-0.1.1-py2.py3-none-any.whl (9.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file djangocms-apphook-setup-0.1.1.tar.gz.

File metadata

File hashes

Hashes for djangocms-apphook-setup-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8059aa1954f077bc58e0ba85b78a6b718cceaa1a99471025387c15836c9bd697
MD5 be0024673fb9af8270df3aca86d65cc3
BLAKE2b-256 4e307f14153ed415fc265797f17a18b5f246b048d1932f1dc771337e8a5e00b7

See more details on using hashes here.

File details

Details for the file djangocms_apphook_setup-0.1.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for djangocms_apphook_setup-0.1.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 89c5e3398606d285a03571140c96dae7df3f6e8d2d6c306e6ad687631a83f561
MD5 077f956fc2a5db5fa888991ef0b2d614
BLAKE2b-256 bb122e1b081c25782a1778794a00b76ab0c2f8a7ed142f03c79728c2bc2cca90

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page