Skip to main content

Juntos Somos +

Django Import Export Stomp

Quality Gate Status Coverage Build Status PyPI version Conventional Commits Generic badge Generic badge

TLDR: Django plugin for file import/export on top of django-import-export using django-stomp.

Table of Contents

About

Django Import Export Stomp is a django plugin that uses django-stomp to import/export models to spreadsheet-like files (csv, xlsx, etc.).

Codebase

The stack

This application uses at least Python 3.10 with at least Django 5.1.

Engineering standards

Commit hooks

Currently we're using pre-commit. To configure it simply use the commands below.

pip install pre-commit
pre-commit install

This will automatically lint the staged files using our project standard linters.

Getting Started

This section provides a high-level requirement & quick start guide.

Prerequisites

⚠️

We do not recommend developing the application without docker!

⚠️

Running example application with Docker

  1. Clone the repository via ssh, ie. git clone git@github.com:juntossomosmais/django-import-export-stomp.git.

  2. Simply running docker compose up --build example is enough to start running django-import-export-stomp on a exmaple with Docker.

Testing the application with Docker

  1. If you want to run the tests run: docker compose run integration-tests.

  2. To run the sonar analysis locally you can use docker compose up -d sonar-client and then docker compose up -d sonar-cli

Documentation

Basic installation

  1. Install package: pip install django-import-export-stomp
  2. Add import_export_stomp to your INSTALLED_APPS in your settings.py
  3. Add author.middlewares.AuthorDefaultBackendMiddleware to your MIDDLEWARE_CLASSES in your settings.py
  4. Setup django-stomp

Running the consumer

Run python manage.py import_export pubsub to start processing messages from the queues.

Setting up imports

On your settings.py add a IMPORT_EXPORT_MODELS variable:

from import_export_stomp.resources import resource_importer

IMPORT_EXPORT_STOMP_MODELS = {
    "Name of your import": {
        "app_label": "fake_app",
        "model_name": "FakeModel",
        "resource": resource_importer(
            "tests.resources.fake_app.resources.FakeResource"
        ),  # optional
    }
}

By default a dry run of the import is initiated when the import object is created. To instead import the file immediately without a dry-run set the IMPORT_DRY_RUN_FIRST_TIME to False.

IMPORT_DRY_RUN_FIRST_TIME = False

Setting up export

As with imports, a fully configured example project can be found in the example directory.

  1. Add a export_resource_classes classmethod to the model you want to export.

    @classmethod
    def export_resource_classes(cls):
        return {
            'winners': ('Winners resource', WinnersResource),
            'winners_all_caps': ('Winners with all caps column resource', WinnersWithAllCapsResource),
        }
    

    This should return a dictionary of tuples. The keys should be unique unchanging strings, the tuples should consist of a resource <https://django-import-export.readthedocs.io/en/latest/getting_started.html#creating-import-export-resource>__ and a human friendly description of that resource.

  2. Add the create_export_job_action to the model's ModelAdmin.

    from django.contrib import admin
    from import_export.admin_actions import create_export_job_action
    
    from . import models
    
    @admin.register(models.Winner)
    class WinnerAdmin(admin.ModelAdmin):
        list_display = (
            'name',
        )
    
        actions = (
            create_export_job_action,
        )
    
  3. To customise export queryset you need to add get_export_queryset to the ModelResource.

    class WinnersResource(ModelResource):
        class Meta:
            model = Winner
    
        def get_export_queryset(self):
            """To customise the queryset of the model resource with annotation override"""
            return self.Meta.model.objects.annotate(device_type=Subquery(FCMDevice.objects.filter(
                    user=OuterRef("pk")).values("type")[:1])
    
  4. Done!

How to use upload with aws s3 presigned url

  1. Have boto3 and django-storages installed in your project: pip install boto3 django-storages

  2. Setup django-storages variables - AWS_STORAGE_BUCKET_NAME is required.

  3. Set IMPORT_EXPORT_STOMP_USE_PRESIGNED_POST to True.

  4. Add urls from import_export_stomp.urls to your urls.py

    from import_export_stomp.urls import urlpatterns as import_export_stomp_urlpatterns
    
    urlpatterns = [...]  # Your urls
    urlpatterns += import_export_stomp_urlpatterns
    
  5. Done!

Performing an import

You will find an example django application that uses django-import-export-stomp for importing data. Once you have it running, you can perform an import with the following steps.

  1. Navigate to the example applications admin page:

    example

  2. Navigate to the ImportJobs table:

    example

  3. Create a new import job. There is an example import CSV file in the example/example-data directory. Select that file. Select csv as the file format. We'll be importing to the Winner's model table.

    example

  4. Select "Save and continue editing" to save the import job and refresh until you see that a "Summary of changes made by this import" file has been created.

    example

  5. You can view the summary if you want. Your import has NOT BEEN PERFORMED YET!

    example

  6. Return to the import-jobs table, select the import job we just created, and select the "Perform import" action from the actions drop down.

    example

  7. In a short time, your imported Winner object should show up in your Winners table.

    example

Performing an export

  1. Perform the basic setup procedure described in the first section.

  2. Open up the object list for your model in django admin, select the objects you wish to export, and select the Export with stomp admin action.

  3. Select the file format and resource you want to use to export the data.

  4. Save the model

  5. You will receive an email when the export is done, click on the link in the email

  6. Click on the link near the bottom of the page titled Exported file.

Settings

  • IMPORT_EXPORT_STOMP_MODELS Required Dict containing all the models that will be imported.

      {
          "Name of your import": {
              "app_label": "fake_app",
              "model_name": "FakeModel",
              "resource": resource_importer(
                  "tests.resources.fake_app.resources.FakeResource"
              ),  # optional -if not present will auto-create
          }
      }
    
  • IMPORT_EXPORT_STOMP_STORAGE Storage class which import/export file field will use. Defaults to None. Example: storages.backends.s3boto3.S3Boto3Storage

  • IMPORT_EXPORT_STOMP_EXCLUDED_FORMATS List of formats to exclude from import/export. Defaults to []. Example: ["csv", "xlsx"]

  • IMPORT_EXPORT_STOMP_PROCESSING_QUEUE Name of the stomp queue that will be used to publish/consume the messages. Defaults to /queue/django-import-export-stomp-runner

  • IMPORT_EXPORT_STOMP_USE_PRESIGNED_POST Enables upload using presigned post url. Uses boto3 and django-storages. Defaults to False.

  • IMPORT_EXPORT_STOMP_PRESIGNED_POST_EXPIRATION Sets signed url expiration time. Defaults to 600

  • IMPORT_EXPORT_STOMP_PRESIGNED_FOLDER Prepends a path to the s3 key. Defaults to ""

Credits

django-import-export-stomp was based on django-import-export-celery developed by the Czech non-profit auto*mat z.s..

Metadata

Release files for django-import-export-stomp 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-import-export-stomp 0.4.1
File Size Uploaded
django_import_export_stomp-0.4.1.tar.gz 25.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-import-export-stomp 0.4.1
File Interpreter ABI Platform
django_import_export_stomp-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 62.2 kB

Release files / django_import_export_stomp-0.4.1.tar.gz

Download URL django_import_export_stomp-0.4.1.tar.gz
Size 25.8 kB
Tags Source
SHA-256 checksum
How to use checksums
05cd49caa40c9ad2e778662b100ac829cb7f6999de4ba772959372dc82286534
BLAKE2b-256 checksum
How to use checksums
a60cf26f1e9b25cf61679ccbcab5dca736971b76253f39cf122629aa59b04729
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.19 Linux/6.11.0-1018-azure

Release files / django_import_export_stomp-0.4.1-py3-none-any.whl

Download URL django_import_export_stomp-0.4.1-py3-none-any.whl
Size 36.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c29578dc1bd4b5b7c684bc2c1d313ac7f152bde2817e7eb33e731847881e4cdb
BLAKE2b-256 checksum
How to use checksums
a64aa2cd6d5905bef380e596ad220da9bb668c5e06fbe68a2abc534613a71895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.19 Linux/6.11.0-1018-azure

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page