Skip to main content

Adds import and export of plugin data.

Project description

pypi coverage python django djangocms

django CMS Transfer is an experimental package that allows you to export and import plugin data from a page or a placeholder. It does not support foreign key relations and won’t import/export related data, such as media.

preview.gif

Documentation

The setting DJANGO_CMS_TRANSFER_SERIALIZER allows registration of a custom JSON serializer. An example use case would be subclassing Django’s built-in Python serializer to base64-encode inline image data.

See REQUIREMENTS in the setup.py file for additional dependencies:

Installation

For a manual install:

  • run pip install djangocms-transfer

  • add djangocms_transfer to your INSTALLED_APPS

Version Compatibility

For django CMS 4.0 or later, you must use djangocms-transfer 2.0 or later.

For django CMS 3.7 through 3.11 use versions 1.x of djangocms-transfer.

How to Use

To export/import a page, click on the “Page” menu on the toolbar and select your desired choice.

To export/import a plugin, Open the “Structure board”, click on the dropdown menu for the specific plugin and select your choice.

Customization

Following settings are available:

  • DJANGOCMS_TRANSFER_PROCESS_EXPORT_PLUGIN_DATA:

    Enables processing of plugin instances prior to serialization, e.g. myapp.module.function.

  • DJANGOCMS_TRANSFER_PROCESS_IMPORT_PLUGIN_DATA:

    Enables processing of plugin instances prior to saving, e.g. myapp.module.function. For example: set default-values for ForeignKeys (images for django_filer, ..)

As an example the combination of _PROCESS_EXPORT_PLUGIN_DATA and _PROCESS_IMPORT_PLUGIN_DATA lets you export and import the data between different systems while setting the contents as you need it:

# settings.py
.._PROCESS_EXPORT_PLUGIN_DATA = "myapp.some.module.export_function"
.._PROCESS_IMPORT_PLUGIN_DATA = "myapp.some.module.import_function"

# custom functions
def export_function(plugin, plugin_data):
    # remove child-plugins which can't be handled
    if plugin.parent_id and plugin.parent.plugin_type == "SomeParentPlugin":
        return None
    # change data
    if plugin.plugin_type == "SomePlugin":
        plugin_data["data"].update({
            "some_field": "TODO: change me",
        })
    return plugin_data

def import_function(plugin, plugin_data):
    some_related_fallback_object = MyModel.objects.first()
    for field in plugin._meta.fields:
        # example of setting a default value for a related field
        if isinstance(field, ForeignKey):
            plugin_value = getattr(plugin, field.attname)
            raw_value = plugin_data[field.name]
            if (
                field.related_model == MyModel
                # related object is referenced, but does not exist
                and plugin_value is None and raw_value is not None
            ):
                setattr(plugin, field.name, some_related_fallback_object)
    # There is no guarantee on whether djangocms-transfer saves the
    # plugin. It is recommended to do this yourself in case you changed
    # the plugin.
    plugin.save()

Running Tests

You can run tests by executing:

python -m venv env
source env/bin/activate
pip install -r tests/requirements/dj51_cms41.txt
coverage run -m pytest

Contribute to this project and win rewards

Because this is an open-source project, we welcome everyone to get involved in the project and receive a reward for their contribution. Become part of a fantastic community and help us make django CMS the best CMS in the world.

We’ll be delighted to receive your feedback in the form of issues and pull requests. Before submitting your pull request, please review our contribution guidelines.

We’re grateful to all contributors who have helped create and maintain this package. Contributors are listed at the contributors section.

Download files

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

Source Distribution

djangocms_transfer-2.0.1.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

djangocms_transfer-2.0.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file djangocms_transfer-2.0.1.tar.gz.

File metadata

  • Download URL: djangocms_transfer-2.0.1.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djangocms_transfer-2.0.1.tar.gz
Algorithm Hash digest
SHA256 b9018d09f17ed5c3bf19cbd09a5b59e6260b0f7bce0e1c040b3c90415a4bff85
MD5 5aa0fcf0115f9a0dece4416bbd3c8b25
BLAKE2b-256 7f053ad9e1beda88efab83f4b226c9d32dcea045d340252501664d800066113c

See more details on using hashes here.

File details

Details for the file djangocms_transfer-2.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for djangocms_transfer-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 009a6588301649c4447fc568ed2d2a5c30dfb0241472b9d2fc71ef794ccdb6b0
MD5 7eab192b71ed12a82af026f6b378906a
BLAKE2b-256 8d8295efee616d0ead378e9ed4884f6070ec3d98001550615faba736b0c440e6

See more details on using hashes here.

Supported by

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