Metadata-Version: 2.1
Name: content-disposition
Version: 1.0.0
Summary: A library that allows easy management of "Content-Disposition" details of HTTP responses.
Home-page: https://github.com/anexia/python-content-disposition
Author: Alexandra Bruckner
Author-email: abruckner@anexia-it.com
License: MIT License
Description: # Content Disposition
        
        [![PyPI version](https://img.shields.io/pypi/v/content-disposition.svg)](https://pypi.org/project/content-disposition/)
        [![Run linter and tests](https://github.com/anexia/python-content-disposition/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/anexia/python-content-disposition/actions/workflows/test.yml)
        [![Codecov](https://img.shields.io/codecov/c/gh/anexia/python-content-disposition)](https://codecov.io/gh/anexia/python-content-disposition)
        
        A library that allows easy management of 'Content-Disposition' details of HTTP responses.
        
        So far it provides:
        * RFC 5987 (file response, https://datatracker.ietf.org/doc/html/rfc5987)
        
        ## Installation
        
        1. Install using pip:
        
        ```
        pip install git+https://github.com/anexia-it/content-disposition@main
        ```
        
        2. Add the library to your INSTALLED_APPS list.
        
        ```
        INSTALLED_APPS = [
            ...
            'content_disposition',
            ...
        ]
        ```
        
        ## Usage
        
        Use the rfc5987_content_disposition function to set an HTTP response's 'Content-Type' field in any endpoint, e.g.:
        ```
        # within views.py
        
        from django.http import FileResponse
        from rest_framework import viewsets
        from rest_framework.decorators import action
        
        from content_disposition import rfc5987_content_disposition
        
        class MyViewSet(viewsets.ModelViewSet):
            ...
            
            @action(
                detail=True,
                methods="get",
                url_path=r"download",
            )
            def download_route(self, request, pk=None):
                """
                Assuming that self.get_object() returns a model defining 
                'name = models.CharField(...)', 'file = models.FileField(...)' and 'mime = models.CharField(...)'
                whereas 'mime' represents the correct mime_type related to 'file'
                """
                instance = self.get_object()
        
                response = FileResponse(
                    instance.file,
                    content_type=instance.mime,
                )
                response["Content-Disposition"] = rfc5987_content_disposition(instance.name)
        
                return response
            ...
        ```
        
        ## Run tests in PyCharm
        
        The package comes with a Django test app to verify functionalities in a realistic environment. To locally run the
        provided test cases, e.g. in your IntelliJ IDEA, you can:
        
        1. Configure the interpreter
           1. Go to `File` -> `Settings` -> `Project: content-disposition` -> `Python interpreter`
           2. `Add` a `Virtualenv Environment` and configure the correct `Location` and check `Inherit global site-packages`:
              1. ![python interpreter config](/docs/pycharm_python_interpreter_config.png)
        2. Configure the Django framework
           1. Go to `File` -> `Settings` -> `Languages & Frameworks` -> `Django`
           2. Check `Enable Django Support` and configure the correct project root, settings and manage script location:
              1. ![django_config](/docs/pycharm_library_config.png)
        3. Install the requirements by running: `pip install -r requirements.txt` in a terminal within your venv
        4. Right click on the `tests` folder and select `Run 'Test:'`
        5. The "Run" window should list all (successfully) executed test cases:
           1. ![test_results](/docs/pycharm_test_results.png)
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/markdown
