Metadata-Version: 2.1
Name: djangorestfilemanager
Version: 1.1.3
Summary: Django REST File Manager.
Home-page: https://gitlab.com/kas-factory/packages/django-rest-file-manager
Author: Avelino @ KF
Author-email: avelino@kasfactory.net
License: COPYRIGHT
Description: # Django REST File Manager
        
        A package that provides authenticated file management (upload/download) using REST Framework and Amazon S3 (optionally)
        
        Install app:
        
        ````bash
        pip install djangorestfilemanager
        ````
        
        Add in installed apps:
        
        ````python
        INSTALLED_APPS = [..., 'rest_framework', 'django_filters', 'djangorestfilemanager.apps.DjangoRestFileManagerConfig']
        
        ````
        
        /proyect/settings.py
        
        Specific app settings, by default will save in /files/.... 
        ````python
        REST_FILE_MANAGER = {
            'UPLOADS_DIR': '...'
        }
        ````
        
        S3 storage setup. 
        
        If AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_STORAGE_BUCKET_NAME is not provided, files will save in local storage
        ```python
        STATIC_URL = '/static/'
        MEDIA_URL = '/media/'
        MEDIA_ROOT = os.path.join(BASE_DIR, 'media', 'files')
        
        S3_STORAGE = False
        AWS_DEFAULT_ACL = None
        
        if env('AWS_ACCESS_KEY_ID') and env('AWS_SECRET_ACCESS_KEY') and env(
                'AWS_STORAGE_BUCKET_NAME'):
            S3_STORAGE = True
            AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
            AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
            AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
            AWS_LOCATION = 'media'
            AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
            AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
            AWS_S3_FILE_OVERWRITE = False
            AWS_S3_ENCRYPTION = True
            AWS_IS_GZIPPED = True
            GZIP_CONTENT_TYPES = (
                'application/pdf', 'application/json', 'text/csv', 'application/xml', 'application/xhtml+xml',
                'application/msword', 'application/vnd.oasis.opendocument.presentation',
                'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.text',
                'application/vnd.ms-powerpoint', 'application/x-rar-compressed', 'application/xhtml+xml',
                'application/vnd.ms-excel', 'application/xml', 'application/zip',
                'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
            )
        ```
        
            
        
        .env:
        
        ```.env
        AWS_DEFAULT_ACL=''
        AWS_ACCESS_KEY_ID=''
        AWS_SECRET_ACCESS_KEY=''
        AWS_STORAGE_BUCKET_NAME=''
        AWS_CACHE_CONTROL=86400
        AWS_LOCATION=''
        AWS_S3_FILE_OVERWRITE=False
        ```
        
        urls.py
        
        
        ```python
        from djangorestfilemanager.urls import router as file_manager_router
        
        urlpatterns = [
            ...,
            path('', include(file_manager_router.urls))
        
        ]
        ```
        
        #API REST ENDPOINTS:
        
        Permission: Authentication is required. 
        
        If user is superuser, can download all files.
        
        If user is file owner, that user can download this file.
        
        If file is shared (share==True) and user have perms, can download this file. 
        
        
        Upload File
        
        |  param      |  description                         |
        | -------     |  -----------                         |
        | url | /{{api}}/files/ | 
        | methods | post |
        | --- | --- |
        | file        |  file object                         |
        | type        |  string, max length 10 not required  |
        | permission  |  string content_type.model +.+ permission.name  Example: user.can_create_user, default '' |
        | share       |  bool, default true |
        | --- | --- |
        | return_data | uuid |
        
        
        Download File
        
        | param | description |
        | ----- | ----------- |
        |  url  |      /{{api}}/files/{{uuid}}/       |
        | --- | --- |
        |  methods  |     get    |
        | --- | --- |
        |  return  |      download file.    |
        
        
        #OVERRIDE ENDPOINTS
        ```python
        DJANGO_REST_FILE_MANAGER_SERIALIZERS = {
            'FILE_SERIALIZER': '...',
            'FILE_VIEW_SERIALIZER': '...',
        }
        ```
        #OVERRIDE SETTINGS
        ```
        REST_FILE_MANAGER = {
            'UPLOADS_DIR': os.environ.get('UPLOADS_DIR', default='media/'),
            'STATUS_CHOICES': (
                (PENDING, 'Pending'),
                ....
            )
            'DEFAULT_CHOICE':'' #STRING VALUE,
            'DEFAULT_SHAREABLE': Boolean, default True
        }
        ```
        # How to update to Pypi
        
        When a new release is ready we have to make the package. Exec the following command (Remember to update setup.py with the current version of the package.)
        
        ```
        python setup.py sdist
        ```
        
        After that, we have to push our package to Pypi with `twine` (the first time we will have to install it)
        
        ```
        twine upload dist/*
        ```
        
        This command will upload every version existing on dist folder, we can specify one changing `dist/*` to the new dist file `dist/package_filename.gz`. 
        
        
        
Platform: UNKNOWN
Description-Content-Type: text/markdown
