Skip to main content

Django pyfilesystem integration

Project description

A Django module which extends pyfilesystem with several methods to make it convenient for web use. Specifically, it extends pyfilesystem with two methods:

fs.get_url(filename, timeout=0)

This will return a externally-usable URL to the resource. If timeout>0, the URL may stop working after that period (in seconds). Details are implementation-dependent. On Amazon S3, this is a secure URL, which is only available for that period. For a static filesystem, the URLs are unsecure and permanent.

fs.expire(filename, seconds, days, expires=True)

This allows us to create temporary objects. Our use-case was that we wanted to generate visualizations to users which were .png images. The lifetime of those images was a single web request, so we set them to expire after a few minutes. Another use case was memoization.

Note that expired files are not automatically removed. To remove them, call expire_objects(). In our system, we had a cron job do this for a while. Celery, manual removals, etc. are all options.

To configure a django-pyfs to use static files, set a parameter in Django settings:

DJFS = {‘type’‘osfs’,

‘directory_root’ : ‘djpyfs/static/djpyfs’, ‘url_root’ : ‘/static/djpyfs’}

Here, directory_root is where the files go. url_root is the URL base of where your web server is configured to serve them from.

To use files on S3, you need boto installed. Then,

DJFS = {‘type’‘s3fs’,

‘bucket’ : ‘my-bucket’, ‘prefix’ : ‘/pyfs/’ }

bucket is your S3 bucket. prefix is optional, and gives a base within that bucket.

To get your filesystem, call:

def get_filesystem(namespace)

Each module should pass a unique namespace. These will typically correspond to subdirectories within the filesystem.

The django-pyfs interface is designed as a generic (non-Django specific) extension to pyfilesystem. However, the specific implementation is very Django-specific.

Good next steps would be to:

  • Allow Django storages to act as a back-end for pyfilesystem

  • Allow django-pyfs to act as a back-end for Django storages

  • Support more types of pyfilesystems (esp. in-memory would be nice)

State: This code is tested and has worked well in a range of settings, and is currently deployed on edx.org. However, it doesn’t have test cases and similar, so can’t be considered truly production-ready. The expiration functionality, in particular, we are not using right now.

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

django-pyfs-1.0.5.tar.gz (13.1 kB view details)

Uploaded Source

Built Distributions

django_pyfs-1.0.5-py2.py3-none-any.whl (11.4 kB view details)

Uploaded Python 2Python 3

django_pyfs-1.0.5-py2-none-any.whl (11.3 kB view details)

Uploaded Python 2

File details

Details for the file django-pyfs-1.0.5.tar.gz.

File metadata

  • Download URL: django-pyfs-1.0.5.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-pyfs-1.0.5.tar.gz
Algorithm Hash digest
SHA256 cfa05369efd6c1e72d17617d5546df7ca986a82b0cc0edff224096e976f1c0e7
MD5 9127193afb334a904e526c80ec06ed6b
BLAKE2b-256 fa59df03a9024c48bef715288032b5c7e0437b47d725020ff03a2181a2152958

See more details on using hashes here.

File details

Details for the file django_pyfs-1.0.5-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_pyfs-1.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 85cdb8436c2a469cf855a1169ae318fe6cab42189668d562cb60167863b433d5
MD5 dcbe74d322f664381bb0cd84b72eb337
BLAKE2b-256 a034dcca499101f065cd277da9a387896f45319aa53b9e3ea232dc14e7f742f6

See more details on using hashes here.

File details

Details for the file django_pyfs-1.0.5-py2-none-any.whl.

File metadata

File hashes

Hashes for django_pyfs-1.0.5-py2-none-any.whl
Algorithm Hash digest
SHA256 c9761931ef042d7593036393d0bb3fce3939a4cb943e06bdb916d2933ddcfb10
MD5 b854a64149521855c69e88a8c0fba674
BLAKE2b-256 ff08075b932a112b604c301a088adb38641b14d1b79ccbbe6a5e19b26fdbd9d5

See more details on using hashes here.

Supported by

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