Compresses linked and inline javascript or CSS into a single cached file.

Overview

Django Compressor

https://codecov.io/github/django-compressor/django-compressor/coverage.svg?branch=develop Build Status

Django Compressor processes, combines and minifies linked and inline Javascript or CSS in a Django template into cacheable static files.

It supports compilers such as coffeescript, LESS and SASS and is extensible by custom processing steps.

Django Compressor is compatible with Django 1.11 and newer.

How it works

In your templates, all HTML code between the tags {% compress js/css %} and {% endcompress %} is parsed and searched for CSS or JS. These styles and scripts are subsequently processed with optional, configurable compilers and filters.

The default filter for CSS rewrites paths to static files to be absolute. Both Javascript and CSS files are by default concatenated and minified.

As the final step the template tag outputs a <script> or <link> tag pointing to the optimized file. Alternatively it can also inline the resulting content into the original template directly.

Since the file name is dependent on the content, these files can be given a far future expiration date without worrying about stale browser caches.

For increased performance, the concatenation and compressing process can also be run once manually outside of the request/response cycle by using the Django management command manage.py compress.

Configurability & Extensibility

Django Compressor is highly configurable and extensible. The HTML parsing is done using lxml or if it's not available Python's built-in HTMLParser by default. As an alternative Django Compressor provides a BeautifulSoup and a html5lib based parser, as well as an abstract base class that makes it easy to write a custom parser.

Django Compressor also comes with built-in support for YUI CSS and JS compressor, yUglify CSS and JS compressor, the Google's Closure Compiler, a Python port of Douglas Crockford's JSmin, a Python port of the YUI CSS Compressor csscompressor and a filter to convert (some) images into data URIs.

If your setup requires a different compressor or other post-processing tool it will be fairly easy to implement a custom filter. Simply extend from one of the available base classes.

More documentation about the usage and settings of Django Compressor can be found on django-compressor.readthedocs.org.

The source code for Django Compressor can be found and contributed to on github.com/django-compressor/django-compressor. There you can also file tickets.

The in-development version of Django Compressor can be installed with pip install git+https://github.com/django-compressor/django-compressor.git

Comments
  • COMPRESS_PRECOMPILERS break css url()

    COMPRESS_PRECOMPILERS break css url()

    Since the precompiled files are served from another location, relative links in css files do not work anymore.

    The Problem can be solved by setting the output dir to an empty string.

    COMPRESS_OUTPUT_DIR = ''
    

    However, it would be great to have processed urls in the css file that link to the right locations of images.

    opened by domoritz 37
  • Add CSP nonce support to compressed JS and CSS in online context

    Add CSP nonce support to compressed JS and CSS in online context

    This is a very work in progress PR as I'm not sure where everything in the codebase is, but this PR comes from https://github.com/django-compressor/django-compressor/issues/946

    The idea is to have two user configurable variables which will be placed as is inline with the script/style tags. ie INLINE_SCRIPT_TAG='foobar123' would result in scripts starting with <script foobar123 src=...</script>. The primary motivator is to allow compressor to work easier with the django-csp nonce mode. https://django-csp.readthedocs.io/en/latest/nonce.html

    I'm sorry, but at the moment I'm not sure how to pass the variables defined in conf into the filter function. If someone can point me at an example I'd be happy to update this PR.

    opened by darakian 30
  • Support for defer and async JavaScript loading

    Support for defer and async JavaScript loading

    Would be awesome to have javascript support for defer and async loading of scripts.

    {% compress js defer %}{% endcompress %}

    Or it just recognizes and keeps the tag on compression if all the scripts have it.

    opened by overshard 28
  • AttributeError at / 'Settings' object has no attribute 'COMPRESS_JS_COMPRESSOR'

    AttributeError at / 'Settings' object has no attribute 'COMPRESS_JS_COMPRESSOR'

    i put COMPRESS_DEBUG_TOGGLE = 'blahblah' to my production settings, and now i got:

    AttributeError at /
    'Settings' object has no attribute 'COMPRESS_JS_COMPRESSOR'
    

    and points me to this line in my template:

    {% compress css %}
    

    here is my production settings:

    ########## COMPRESSION CONFIGURATION
    COMPRESS_ENABLED = True
    # Default : the opposite of DEBUG
    
    COMPRESS_OFFLINE = False
    COMPRESS_STORAGE = DEFAULT_FILE_STORAGE
    COMPRESS_CSS_FILTERS += [
        #'compressor.filters.cssmin.CSSMinFilter',
        'compressor.filters.template.TemplateFilter',
    ]
    COMPRESS_JS_FILTERS += [
        #'compressor.filters.jsmin.JSMinFilter',
        'compressor.filters.template.TemplateFilter',
    ]
    
    COMPRESS_DEBUG_TOGGLE = 'compressor'
    ########## END COMPRESSION CONFIGURATION
    

    any suggestions?

    (edit by @diox : original bug report info: https://github.com/jezdez/django_compressor/issues/173#issuecomment-10016037 )

    opened by serkansokmen 26
  • Fix compress command for 1.8

    Fix compress command for 1.8

    Work in progress. Build should pass but probably not ready to merge.

    Will Fix #588.

    This is steps towards fixing the compress command for 1.8.

    1
    I needed to remove jingo from INSTALLED_APPS for 1.8 — without this, the tests don't even get passed importing. (See 7706bae)

    2 Having made the changes pointed to by @aaugustin (Thanks again there — you rock!) I was able to get the compress command running through with only small changes — and the existing tox run still passing.

    But...

    3 The are a lot of test failures if you run against 1.8 (See summary on 72b33ddbcd). These fail into two kinds:

    1. Too many compress tags found.
    2. Missing keys from the manifest.

    I'm not currently sure what's a genuine error and what's a result of (for example) 1 above. I'm not familiar enough with the test suite yet to see how the dual tempting works there (and how it might interact with 1.8).

    My next step will be to pull this into a real project to see if the results are as expected. I'll then come back to the tests here.

    I'm hoping that you (@jezdez or @diox or anyone else who knows the test suite) can run this against 1.8 and input some advice about what's happening. (That would be awesome.)

    (I can add 1.8 to the tox and/or travis configs if that's a help.)

    opened by carltongibson 25
  • rcssmin and rjsmin do not install

    rcssmin and rjsmin do not install

    I am installing django-compressor on Windows 10 x64 with Python 3.4 x64. I get the following error when I install it with pip. Interestingly enough, I did not get such an error with Python 3.5 x64.

    >  pip install django-compressor --upgrade
    Collecting django-compressor
      Using cached django_compressor-2.1-py2.py3-none-any.whl
    Collecting rjsmin==1.0.12 (from django-compressor)
      Using cached rjsmin-1.0.12.tar.gz
    Collecting rcssmin==1.0.6 (from django-compressor)
      Using cached rcssmin-1.0.6.tar.gz
    Requirement already up-to-date: django-appconf>=1.0 in d:\env3\lib\site-packages (from django-compressor)
    Building wheels for collected packages: rjsmin, rcssmin
      Running setup.py bdist_wheel for rjsmin ... error
      Complete output from command d:\env\scripts\python.exe -u -c "import setuptools, tokenize;__file__='\\Temp\\pip-build-um3ph8qp\\rjsmin\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d \Temp\tmp6dj8tx90pip-wheel- --python-tag cp34:
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-3.4
      copying .\rjsmin.py -> build\lib.win-amd64-3.4
      running build_ext
      building '_rjsmin' extension
      error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279
    
      ----------------------------------------
      Failed building wheel for rjsmin
      Running setup.py clean for rjsmin
      Running setup.py bdist_wheel for rcssmin ... error
      Complete output from command d:\env3\scriptspython.exe -u -c "import setuptools, tokenize;__file__='\\Temp\\pip-build-um3ph8qp\\rcssmin\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d \Temp\tmp_cfj9vrjpip-wheel- --python-tag cp34:
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-3.4
      copying .\rcssmin.py -> build\lib.win-amd64-3.4
      running build_ext
      building '_rcssmin' extension
      error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279
    
      ----------------------------------------
      Failed building wheel for rcssmin
      Running setup.py clean for rcssmin
    Failed to build rjsmin rcssmin
    Installing collected packages: rjsmin, rcssmin, django-compressor
      Running setup.py install for rjsmin ... error
        Complete output from command d:\env3\scripts\python.exe -u -c "import setuptools, tokenize;__file__='\\Temp\\pip-build-um3ph8qp\\rjsmin\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record \Temp\pip-_z23ysr6-record\install-record.txt --single-version-externally-managed --compile --install-headers d:\env3\include\site\python3.4\rjsmin:
        running install
        running build
        running build_py
        creating build
        creating build\lib.win-amd64-3.4
        copying .\rjsmin.py -> build\lib.win-amd64-3.4
        running build_ext
        building '_rjsmin' extension
        error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279
    
        ----------------------------------------
    Command "d:\env3\scripts\python.exe -u -c "import setuptools, tokenize;__file__='\\Temp\\pip-build-um3ph8qp\\rjsmin\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record \Temp\pip-_z23ysr6-record\install-record.txt --single-version-externally-managed --compile --install-headers d:\env3\include\site\python3.4\rjsmin" failed with error code 1 in \Temp\pip-build-um3ph8qp\rjsmin\
    
    
    opened by bobort 23
  • AttributeError: 'cStringIO.StringO' object has no attribute 'name'

    AttributeError: 'cStringIO.StringO' object has no attribute 'name'

    The example CachedS3BotoStorage raises this exception when I try to do collectstatic.

    I'm using compressor@develop Django@trunk

    Traceback (most recent call last):
      File "manage.py", line 11, in <module>
        execute_manager(settings)
      File "/Users/andrew/Labs/something/src/django/django/core/management/__init__.py", line 442, in execute_manager
        utility.execute()
      File "/Users/andrew/Labs/something/src/django/django/core/management/__init__.py", line 379, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/Users/andrew/Labs/something/src/django/django/core/management/base.py", line 191, in run_from_argv
        self.execute(*args, **options.__dict__)
      File "/Users/andrew/Labs/something/src/django/django/core/management/base.py", line 220, in execute
        output = self.handle(*args, **options)
      File "/Users/andrew/Labs/something/src/django/django/core/management/base.py", line 351, in handle
        return self.handle_noargs(**options)
      File "/Users/andrew/Labs/something/src/django/django/contrib/staticfiles/management/commands/collectstatic.py", line 116, in handle_noargs
        handler(path, prefixed_path, storage)
      File "/Users/andrew/Labs/something/src/django/django/contrib/staticfiles/management/commands/collectstatic.py", line 243, in copy_file
        self.storage.save(prefixed_path, source_file)
      File "/Users/andrew/Labs/something/something/../something/contrib/storages/__init__.py", line 11, in save
        self.local_storage._save(name, content)
      File "/Users/andrew/Labs/something/src/django/django/core/files/storage.py", line 198, in _save
        for chunk in content.chunks():
      File "/Users/andrew/Labs/something/src/django/django/core/files/base.py", line 65, in chunks
        counter = self.size
      File "/Users/andrew/Labs/something/src/django/django/core/files/base.py", line 39, in _get_size
        elif os.path.exists(self.file.name):
    AttributeError: 'cStringIO.StringO' object has no attribute 'name'
    

    The exact code for the backend is:

    from django.core.files.storage import get_storage_class
    from storages.backends.s3boto import S3BotoStorage
    
    class CachedS3BotoStorage(S3BotoStorage):
        def __init__(self, *args, **kwargs):
            super(CachedS3BotoStorage, self).__init__(*args, **kwargs)
            self.local_storage = get_storage_class('compressor.storage.CompressorFileStorage')()
    
        def save(self, name, content):
            name = super(CachedS3BotoStorage, self).save(name, content)
            self.local_storage._save(name, content)
            return name
    

    And my settings:

    MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
    MEDIA_URL = '//something.s3.amazonaws.com/media/'
    
    STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
    STATIC_URL = '//something.s3.amazonaws.com/static/'
    
    STATICFILES_DIRS = (
        os.path.join(PROJECT_DIR, 'static_media'),
    )
    
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        'compressor.finders.CompressorFinder',
    )
    
    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    STATICFILES_STORAGE = 'something.contrib.storages.CachedS3BotoStorage'
    
    COMPRESS_STORAGE = STATICFILES_STORAGE
    COMPRESS_OUTPUT_DIR = 'compressed'
    COMPRESS_CSS_FILTERS = (
        'compressor.filters.css_default.CssAbsoluteFilter',
        'compressor.filters.cssmin.CSSMinFilter',
    )
    COMPRESS_JS_FILTERS = (
        'compressor.filters.jsmin.JSMinFilter',
    )
    
    opened by amccloud 23
  • AppConf not update Settings in compressor/conf.py in Django 1.4

    AppConf not update Settings in compressor/conf.py in Django 1.4

    When get up the server I got this error

    'Settings' object has no attribute 'COMPRESS_DEBUG_TOGGLE' ... /home/.../compressor/templatetags/compress.py in render if self.debug_mode(context): ... ▶ Local vars /home/.../compressor/templatetags/compress.py in debug_mode if settings.COMPRESS_DEBUG_TOGGLE: ... ▶ Local vars

    I'm using Django 1.4 with dev version of django compressor

    opened by mtdb 22
  • Offline compression for Jinja2 with Jingo and Coffin integration

    Offline compression for Jinja2 with Jingo and Coffin integration

    I'm done with offline support for jinja2.

    I have added the setting:

    # function that returns an Environment, which serves as an integration point for Jingo and Coffin.
    COMPRESS_JINJA2_GET_ENVIRONMENT
    

    Usage

    ./manage.py compress -engine {jinja2,django} Default engine is Django.

    Using with Jingo or Coffin

    See test_offline.py (bottom of the file) to see how to use the setting to get coffin's or jingo's env.

    Using both Django and Jinja2 templates

    I think it is somewhat supported in the sense that when Jinja2 engine is used to parse Django templates (and vice versa), the TemplateSyntaxError will be thrown and thereby skipping the templates. This fact can be exploited to support mixing of Django and Jinja2 templates in the same project (indicated by TEMPLATE_DIRS).

    A user could, do the following: specify TEMPLATE_DIRS to include both Django and Jinja2 locations. ./manage.py compress => Process Django templates, skipping Jinja2 templates. ./manage.py compress -engine jinja2 => Process Jinja2 templates, skipping Django templates.

    Consider this feature as auto-detection of the templating language. Although for robustness, we should have a parameter to indicate specific Jinja2 template locations.

    Limitations

    • May not support {% import %} and etc. blocks within {% compress %} blocks. Actually this is not tested, so it may or may not work. {% if %}, {% with %} and {% for %} are tested though.
    • Does not support {{super()}} for now.
    opened by ghost 21
  • Installation bug django-compressor (rcssmin)

    Installation bug django-compressor (rcssmin)

    ➜  byvshie ./build
    +++ dirname ./build
    ++ cd .
    ++ pwd
    + DIR=/Users/lorddaedra/Projects/byvshie
    + docker build -t entropia/byvshie:latest -f /Users/lorddaedra/Projects/byvshie/Dockerfile /Users/lorddaedra/Projects/byvshie
    Sending build context to Docker daemon 22.76 MB
    Step 1 : FROM python:3.5-alpine
     ---> e57c79136a08
    Step 2 : ENV PYTHONUNBUFFERED 1
     ---> Using cache
     ---> 22523b31cff4
    Step 3 : ENV DJANGO_SETTINGS_MODULE byvshie.settings
     ---> Running in de1961075197
     ---> 145ec94af4da
    Removing intermediate container de1961075197
    Step 4 : ENV LIBRARY_PATH /lib:/usr/lib
     ---> Running in 4d3affe0e89e
     ---> a380f6806984
    Removing intermediate container 4d3affe0e89e
    Step 5 : WORKDIR /
     ---> Running in 1f46cac384aa
     ---> b81cbeaf84dd
    Removing intermediate container 1f46cac384aa
    Step 6 : RUN set -ex     && mkdir -p /usr/src/app
     ---> Running in e1e0a13099db
    + mkdir -p /usr/src/app
     ---> cd86298883ed
    Removing intermediate container e1e0a13099db
    Step 7 : COPY requirements.txt /usr/src/app
     ---> b21ad0d5135f
    Removing intermediate container 43070bfb3213
    Step 8 : COPY config/Lib/ctypes/util.py /usr/local/lib/python3.5/ctypes
     ---> 3ff35452a40d
    Removing intermediate container 16ff555230a4
    Step 9 : RUN set -ex    && addgroup -g 82 -S www-data   && adduser -u 82 -D -S -G www-data www-data     && apk update     && apk upgrade     && build_pkgs="build-base linux-headers openssl-dev pcre-dev wget postgresql-dev libxml2-dev libxslt-dev libffi-dev jpeg-dev freetype-dev  tiff-dev libwebp-dev zlib-dev git mercurial"     && runtime_pkgs="ca-certificates postgresql openssl libxml2 libxslt libffi jpeg freetype tiff libwebp    libmagic gettext pcre zlib bash bc"     && apk --update add --no-cache ${build_pkgs} ${runtime_pkgs}     && pip install --no-cache-dir  -U setuptools pip     && pip install --no-cache-dir  -r /usr/src/app/requirements.txt     && apk del ${build_pkgs}     && rm -rf /var/cache/apk/*
     ---> Running in 2b07b2bf8b7c
    + addgroup -g 82 -S www-data
    + adduser -u 82 -D -S -G www-data www-data
    + apk update
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
    v3.4.5 [http://dl-cdn.alpinelinux.org/alpine/v3.4/main]
    v3.4.4-21-g75fc217 [http://dl-cdn.alpinelinux.org/alpine/v3.4/community]
    OK: 5974 distinct packages available
    + apk upgrade
    (1/2) Upgrading musl (1.1.14-r12 -> 1.1.14-r13)
    (2/2) Upgrading musl-utils (1.1.14-r12 -> 1.1.14-r13)
    Executing busybox-1.24.2-r11.trigger
    OK: 31 MiB in 32 packages
    + build_pkgs=build-base linux-headers openssl-dev pcre-dev wget postgresql-dev libxml2-dev libxslt-dev libffi-dev jpeg-dev freetype-dev  tiff-dev libwebp-dev zlib-dev git mercurial
    + runtime_pkgs=ca-certificates postgresql openssl libxml2 libxslt libffi jpeg freetype tiff libwebp    libmagic gettext pcre zlib bash bc
    + apk --update add --no-cache build-base linux-headers openssl-dev pcre-dev wget postgresql-dev libxml2-dev libxslt-dev libffi-dev jpeg-dev freetype-dev tiff-dev libwebp-dev zlib-dev git mercurial ca-certificates postgresql openssl libxml2 libxslt libffi jpeg freetype tiff libwebp libmagic gettext pcre zlib bash bc
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
    (1/69) Installing bash (4.3.42-r3)
    Executing bash-4.3.42-r3.post-install
    (2/69) Installing bc (1.06.95-r2)
    (3/69) Installing binutils-libs (2.26-r0)
    (4/69) Installing binutils (2.26-r0)
    (5/69) Installing gmp (6.1.0-r0)
    (6/69) Installing isl (0.14.1-r0)
    (7/69) Installing libgomp (5.3.0-r0)
    (8/69) Installing libatomic (5.3.0-r0)
    (9/69) Installing libgcc (5.3.0-r0)
    (10/69) Installing pkgconf (0.9.12-r0)
    (11/69) Installing pkgconfig (0.25-r1)
    (12/69) Installing mpfr3 (3.1.2-r0)
    (13/69) Installing mpc1 (1.0.3-r0)
    (14/69) Installing libstdc++ (5.3.0-r0)
    (15/69) Installing gcc (5.3.0-r0)
    (16/69) Installing make (4.1-r1)
    (17/69) Installing musl-dev (1.1.14-r13)
    (18/69) Installing libc-dev (0.7-r0)
    (19/69) Installing fortify-headers (0.8-r0)
    (20/69) Installing g++ (5.3.0-r0)
    (21/69) Installing build-base (0.4-r1)
    (22/69) Installing zlib-dev (1.2.8-r2)
    (23/69) Installing libpng-dev (1.6.21-r0)
    (24/69) Installing freetype-dev (2.6.3-r0)
    (25/69) Installing libintl (0.19.7-r3)
    (26/69) Installing libunistring (0.9.6-r0)
    (27/69) Installing libxml2 (2.9.4-r0)
    (28/69) Installing gettext (0.19.7-r3)
    (29/69) Installing libssh2 (1.7.0-r0)
    (30/69) Installing libcurl (7.50.3-r0)
    (31/69) Installing pcre (8.38-r1)
    (32/69) Installing git (2.8.3-r0)
    (33/69) Installing libjpeg-turbo (1.4.2-r0)
    (34/69) Installing libjpeg-turbo-utils (1.4.2-r0)
    (35/69) Installing jpeg (8-r6)
    (36/69) Installing libjpeg-turbo-dev (1.4.2-r0)
    (37/69) Installing jpeg-dev (8-r6)
    (38/69) Installing libffi (3.2.1-r2)
    (39/69) Installing libffi-dev (3.2.1-r2)
    (40/69) Installing libmagic (5.27-r0)
    (41/69) Installing libwebp (0.5.0-r0)
    (42/69) Installing libwebp-dev (0.5.0-r0)
    (43/69) Installing libxml2-dev (2.9.4-r0)
    (44/69) Installing libgpg-error (1.23-r0)
    (45/69) Installing libgcrypt (1.7.0-r1)
    (46/69) Installing libxslt (1.1.29-r0)
    (47/69) Installing libxslt-dev (1.1.29-r0)
    (48/69) Installing linux-headers (4.4.6-r1)
    (49/69) Installing gdbm (1.11-r1)
    (50/69) Installing python (2.7.12-r0)
    (51/69) Installing mercurial (3.8.2-r0)
    (52/69) Installing openssl (1.0.2j-r0)
    (53/69) Installing openssl-dev (1.0.2j-r0)
    (54/69) Installing libpcre16 (8.38-r1)
    (55/69) Installing libpcre32 (8.38-r1)
    (56/69) Installing libpcrecpp (8.38-r1)
    (57/69) Installing pcre-dev (8.38-r1)
    (58/69) Installing libedit (20150325.3.1-r3)
    (59/69) Installing db (5.3.28-r0)
    (60/69) Installing libsasl (2.1.26-r7)
    (61/69) Installing libldap (2.4.44-r1)
    (62/69) Installing libpq (9.5.4-r0)
    (63/69) Installing postgresql-client (9.5.4-r0)
    (64/69) Installing postgresql (9.5.4-r0)
    (65/69) Installing postgresql-libs (9.5.4-r0)
    (66/69) Installing postgresql-dev (9.5.4-r0)
    (67/69) Installing tiff (4.0.6-r3)
    (68/69) Installing tiff-dev (4.0.6-r3)
    (69/69) Installing wget (1.18-r0)
    Executing busybox-1.24.2-r11.trigger
    Executing ca-certificates-20160104-r4.trigger
    OK: 304 MiB in 101 packages
    + pip install --no-cache-dir -U setuptools pip
    Collecting setuptools
      Downloading setuptools-28.7.0-py2.py3-none-any.whl (472kB)
    Requirement already up-to-date: pip in /usr/local/lib/python3.5/site-packages
    Installing collected packages: setuptools
      Found existing installation: setuptools 20.10.1
        Uninstalling setuptools-20.10.1:
          Successfully uninstalled setuptools-20.10.1
    Successfully installed setuptools-28.7.0
    + pip install --no-cache-dir -r /usr/src/app/requirements.txt
    Collecting argon2_cffi==16.2.0 (from -r /usr/src/app/requirements.txt (line 1))
      Downloading argon2_cffi-16.2.0.tar.gz (1.2MB)
    Collecting bcrypt==3.1.1 (from -r /usr/src/app/requirements.txt (line 2))
      Downloading bcrypt-3.1.1.tar.gz (40kB)
    Collecting certifi==2016.9.26 (from -r /usr/src/app/requirements.txt (line 3))
      Downloading certifi-2016.9.26-py2.py3-none-any.whl (377kB)
    Collecting cffi==1.8.3 (from -r /usr/src/app/requirements.txt (line 4))
      Downloading cffi-1.8.3.tar.gz (403kB)
    Collecting defusedxml==0.4.1 (from -r /usr/src/app/requirements.txt (line 5))
      Downloading defusedxml-0.4.1.tar.gz (48kB)
    Collecting Django==1.10.2 (from -r /usr/src/app/requirements.txt (line 6))
      Downloading Django-1.10.2-py2.py3-none-any.whl (6.8MB)
    Collecting django-appconf==1.0.2 (from -r /usr/src/app/requirements.txt (line 7))
      Downloading django_appconf-1.0.2-py2.py3-none-any.whl
    Collecting django-app-namespace-template-loader==0.4.1 (from -r /usr/src/app/requirements.txt (line 9))
      Downloading django_app_namespace_template_loader-0.4.1-py2.py3-none-any.whl
    Obtaining django-backblazeb2-storage from git+https://github.com/royendgel/django-backblazeb2-storage.git@f017e4ce7564c852f55d2aa67e70983ccc7563ec#egg=django-backblazeb2-storage (from -r /usr/src/app/requirements.txt (line 10))
      Cloning https://github.com/royendgel/django-backblazeb2-storage.git (to f017e4ce7564c852f55d2aa67e70983ccc7563ec) to /src/django-backblazeb2-storage
      Could not find a tag or branch 'f017e4ce7564c852f55d2aa67e70983ccc7563ec', assuming commit.
    Collecting django_compressor==2.1 (from -r /usr/src/app/requirements.txt (line 11))
      Downloading django_compressor-2.1-py2.py3-none-any.whl (130kB)
    Collecting django-debug-toolbar==1.6 (from -r /usr/src/app/requirements.txt (line 12))
      Downloading django_debug_toolbar-1.6-py2.py3-none-any.whl (205kB)
    Collecting django-el-pagination==3.0.1 (from -r /usr/src/app/requirements.txt (line 13))
      Downloading django-el-pagination-3.0.1.tar.gz (358kB)
    Collecting django-formtools==1.0 (from -r /usr/src/app/requirements.txt (line 14))
      Downloading django_formtools-1.0-py2.py3-none-any.whl (132kB)
    Collecting django-mailer==1.2.2 (from -r /usr/src/app/requirements.txt (line 15))
      Downloading django-mailer-1.2.2.tar.gz
    Collecting django-user-accounts==2.0.0 (from -r /usr/src/app/requirements.txt (line 16))
      Downloading django_user_accounts-2.0.0-py2.py3-none-any.whl (104kB)
    Collecting docutils==0.12 (from -r /usr/src/app/requirements.txt (line 17))
      Downloading docutils-0.12-py3-none-any.whl (508kB)
    Collecting lxml==3.6.4 (from -r /usr/src/app/requirements.txt (line 18))
      Downloading lxml-3.6.4.tar.gz (3.7MB)
    Collecting oauthlib==2.0.0 (from -r /usr/src/app/requirements.txt (line 19))
      Downloading oauthlib-2.0.0.tar.gz (122kB)
    Collecting Pillow==3.4.2 (from -r /usr/src/app/requirements.txt (line 20))
      Downloading Pillow-3.4.2.tar.gz (10.8MB)
    Collecting psycopg2==2.6.2 (from -r /usr/src/app/requirements.txt (line 21))
      Downloading psycopg2-2.6.2.tar.gz (376kB)
    Collecting pycparser==2.16 (from -r /usr/src/app/requirements.txt (line 22))
      Downloading pycparser-2.16.tar.gz (230kB)
    Collecting PyJWT==1.4.2 (from -r /usr/src/app/requirements.txt (line 23))
      Downloading PyJWT-1.4.2-py2.py3-none-any.whl
    Collecting python-magic==0.4.12 (from -r /usr/src/app/requirements.txt (line 24))
      Downloading python-magic-0.4.12.tar.gz
    Collecting python-simple-hipchat==0.4.0 (from -r /usr/src/app/requirements.txt (line 25))
      Downloading python-simple-hipchat-0.4.0.tar.gz
    Collecting python-social-auth==0.2.21 (from -r /usr/src/app/requirements.txt (line 26))
      Downloading python_social_auth-0.2.21-py3-none-any.whl (302kB)
    Collecting python3-openid==3.0.10 (from -r /usr/src/app/requirements.txt (line 27))
      Downloading python3-openid-3.0.10.zip (365kB)
    Collecting pytz==2016.7 (from -r /usr/src/app/requirements.txt (line 28))
      Downloading pytz-2016.7-py2.py3-none-any.whl (480kB)
    Collecting raven==5.30.0 (from -r /usr/src/app/requirements.txt (line 29))
      Downloading raven-5.30.0-py2.py3-none-any.whl (277kB)
    Collecting requests==2.11.1 (from -r /usr/src/app/requirements.txt (line 30))
      Downloading requests-2.11.1-py2.py3-none-any.whl (514kB)
    Collecting requests-oauthlib==0.7.0 (from -r /usr/src/app/requirements.txt (line 31))
      Downloading requests_oauthlib-0.7.0-py2.py3-none-any.whl
    Collecting simplejson==3.8.2 (from -r /usr/src/app/requirements.txt (line 32))
      Downloading simplejson-3.8.2.tar.gz (76kB)
    Collecting six==1.10.0 (from -r /usr/src/app/requirements.txt (line 33))
      Downloading six-1.10.0-py2.py3-none-any.whl
    Collecting sqlparse==0.2.1 (from -r /usr/src/app/requirements.txt (line 34))
      Downloading sqlparse-0.2.1-py2.py3-none-any.whl
    Collecting uwsgi==2.0.14 (from -r /usr/src/app/requirements.txt (line 35))
      Downloading uwsgi-2.0.14.tar.gz (788kB)
    Collecting rcssmin==1.0.6 (from django_compressor==2.1->-r /usr/src/app/requirements.txt (line 11))
      Downloading rcssmin-1.0.6.tar.gz (582kB)
        Complete output from command python setup.py egg_info:
        running egg_info
        creating pip-egg-info/rcssmin.egg-info
        writing pip-egg-info/rcssmin.egg-info/PKG-INFO
        writing dependency_links to pip-egg-info/rcssmin.egg-info/dependency_links.txt
        writing top-level names to pip-egg-info/rcssmin.egg-info/top_level.txt
        writing manifest file 'pip-egg-info/rcssmin.egg-info/SOURCES.txt'
        warning: manifest_maker: standard file '-c' not found
    
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "/tmp/pip-build-dzarxluf/rcssmin/setup.py", line 42, in <module>
            setup()
          File "/tmp/pip-build-dzarxluf/rcssmin/setup.py", line 33, in setup
            return run(script_args=args, ext=ext, manifest_only=_manifest)
          File "/tmp/pip-build-dzarxluf/rcssmin/_setup/py3/setup.py", line 426, in run
            return _core.setup(**kwargs)
          File "/usr/local/lib/python3.5/distutils/core.py", line 148, in setup
            dist.run_commands()
          File "/usr/local/lib/python3.5/distutils/dist.py", line 955, in run_commands
            self.run_command(cmd)
          File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command
            cmd_obj.run()
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/egg_info.py", line 279, in run
            self.find_sources()
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/egg_info.py", line 306, in find_sources
            mm.run()
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/egg_info.py", line 533, in run
            self.add_defaults()
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/egg_info.py", line 562, in add_defaults
            sdist.add_defaults(self)
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/py36compat.py", line 35, in add_defaults
            self._add_defaults_data_files()
          File "/usr/local/lib/python3.5/site-packages/setuptools/command/py36compat.py", line 111, in _add_defaults_data_files
            dirname, filenames = item
        TypeError: 'Documentation' object is not iterable
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-dzarxluf/rcssmin/
    The command '/bin/sh -c set -ex     && addgroup -g 82 -S www-data   && adduser -u 82 -D -S -G www-data www-data     && apk update     && apk upgrade     && build_pkgs="build-base linux-headers openssl-dev pcre-dev wget postgresql-dev libxml2-dev libxslt-dev libffi-dev jpeg-dev freetype-dev  tiff-dev libwebp-dev zlib-dev git mercurial"     && runtime_pkgs="ca-certificates postgresql openssl libxml2 libxslt libffi jpeg freetype tiff libwebp    libmagic gettext pcre zlib bash bc"     && apk --update add --no-cache ${build_pkgs} ${runtime_pkgs}     && pip install --no-cache-dir  -U setuptools pip     && pip install --no-cache-dir  -r /usr/src/app/requirements.txt     && apk del ${build_pkgs}     && rm -rf /var/cache/apk/*' returned a non-zero code: 1
    
    opened by ghost 20
  • Intermittent failure in offline compression

    Intermittent failure in offline compression

    Hi,

    We use django-compressor (v3.1) in our Django (v4.0.2) application. Our CI randomly fails (something like 1 run in 20) on the compress step with errors like this one:

    #18 [16/17] RUN python manage.py compress --extension .html,.xsl
    #18 3.681 CommandError: An error occurred during rendering registration/password_change_form.html: [Errno 2] No such file or directory: '/code/sereema/staticfiles/CACHE/js/output.5840362cca8f.js'
    

    If I read correctly, this is a known issue (#1082) that was fixed in v3.0. But it seems like the fix was not enough.

    opened by jtremesay-sereema 18
  • Bump coverage from 6.5.0 to 7.0.2 in /requirements

    Bump coverage from 6.5.0 to 7.0.2 in /requirements

    Bumps coverage from 6.5.0 to 7.0.2.

    Changelog

    Sourced from coverage's changelog.

    Version 7.0.2 — 2023-01-02

    • Fix: when using the [run] relative_files = True setting, a relative [paths] pattern was still being made absolute. This is now fixed, closing issue 1519_.

    • Fix: if Python doesn't provide tomllib, then TOML configuration files can only be read if coverage.py is installed with the [toml] extra. Coverage.py will raise an error if TOML support is not installed when it sees your settings are in a .toml file. But it didn't understand that [tools.coverage] was a valid section header, so the error wasn't reported if you used that header, and settings were silently ignored. This is now fixed, closing issue 1516_.

    • Fix: adjusted how decorators are traced on PyPy 7.3.10, fixing issue 1515_.

    • Fix: the coverage lcov report did not properly implement the --fail-under=MIN option. This has been fixed.

    • Refactor: added many type annotations, including a number of refactorings. This should not affect outward behavior, but they were a bit invasive in some places, so keep your eyes peeled for oddities.

    • Refactor: removed the vestigial and long untested support for Jython and IronPython.

    .. _issue 1515: nedbat/coveragepy#1515 .. _issue 1516: nedbat/coveragepy#1516 .. _issue 1519: nedbat/coveragepy#1519

    .. _changes_7-0-1:

    Version 7.0.1 — 2022-12-23

    • When checking if a file mapping resolved to a file that exists, we weren't considering files in .whl files. This is now fixed, closing issue 1511_.

    • File pattern rules were too strict, forbidding plus signs and curly braces in directory and file names. This is now fixed, closing issue 1513_.

    • Unusual Unicode or control characters in source files could prevent reporting. This is now fixed, closing issue 1512_.

    • The PyPy wheel now installs on PyPy 3.7, 3.8, and 3.9, closing issue 1510_.

    .. _issue 1510: nedbat/coveragepy#1510 .. _issue 1511: nedbat/coveragepy#1511

    ... (truncated)

    Commits
    • 2f731e2 docs: sample HTML
    • dbbd5b7 docs: prep for 7.0.2
    • d08e6d0 fix: relative_files should keep relative path maps. #1519
    • 3f0bce2 mypy: partial debug.py and pytracer.py
    • ffc701a mypy: test_xml.py
    • 5580cf8 mypy: xmlreport.py
    • 0c9b5e0 mypy: check collector.py and plugin_support.py
    • 8f4d404 refactor: a better way to filter coverage debug pybehave
    • a3f3841 mypy: add cmdline.py and test_cmdline.py
    • 09f9188 mypy: add env.py
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump lxml from 4.9.1 to 4.9.2 in /requirements

    Bump lxml from 4.9.1 to 4.9.2 in /requirements

    Bumps lxml from 4.9.1 to 4.9.2.

    Changelog

    Sourced from lxml's changelog.

    4.9.2 (2022-12-13)

    Bugs fixed

    Other changes

    • LP#1981760: Element.attrib now registers as collections.abc.MutableMapping.

    • lxml now has a static build setup for macOS on ARM64 machines (not used for building wheels). Patch by Quentin Leffray.

    Commits
    • c17c1ca Use same naming for Python version matrix variable in wheel workflow as in CI...
    • fc2f7ea Use windows-2016 image instead of windows-2019 to fix the Py2.7 build.
    • 98224b3 Install more recent library versions for the wheel build.
    • ce4e5bc Fix release date.
    • cece238 Add PyPy-3.8 CI target.
    • 2c2308e Try to add a Windows CI build for Py2.7.
    • 0b0b2b9 Exclude missing Python versions from CI jobs.
    • b848b82 Try to fix CI "setup.py install" in Py3.11.
    • 487a194 CI: exclude non-static Windows jobs.
    • fc53d6f Show executed commands in CI runs.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump flake8 from 5.0.4 to 6.0.0 in /requirements

    Bump flake8 from 5.0.4 to 6.0.0 in /requirements

    Bumps flake8 from 5.0.4 to 6.0.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Python 3.11 test failure

    Python 3.11 test failure

    I'm seeing OfflineCompressTestCaseWithLazyStringAlikeUrls test failures under Python 3.11. Bisecting the Python 3.11 branch showed that the https://github.com/python/cpython/commit/76cd81d60310d65d01f9d7b48a8985d8ab89c8b4 commit introduced the issue.

    I tried commenting out the @functools.lru_cache(typed=True) line from the urlsplit function in the Python 3.11 branch, and that seemed to fix the test. Does there need to be a clear_cache() call, or some other way to deal with the urlsplit cache in Python 3.11?

    opened by bcail 0
  • TypeError: inner() missing 1 required positional argument: 'request'

    TypeError: inner() missing 1 required positional argument: 'request'

    django version

    Django=2.2.17

    django-compressor version

    django-compressor=4.1

    settings.py

    INSTALLED_APPS = [
        'compressor',
        "simpleui",
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
        "django.contrib.messages",
        "django.contrib.staticfiles",
    ]
    MIDDLEWARE = [
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        "django.middleware.security.SecurityMiddleware",
        "django.middleware.gzip.GZipMiddleware",
        "django.contrib.sessions.middleware.SessionMiddleware",
        "corsheaders.middleware.CorsMiddleware",
        "django.middleware.common.CommonMiddleware",
        "django.contrib.auth.middleware.AuthenticationMiddleware",
        "django.contrib.messages.middleware.MessageMiddleware",
        "django.middleware.clickjacking.XFrameOptionsMiddleware",
        'compressor.finders.CompressorFinder',
    ]
    
    STATIC_URL = "/static/"
    
    STATICFILES_FINDERS = [
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        'compressor.finders.CompressorFinder'
    ]
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    COMPRESS_ROOT = os.path.join(BASE_DIR, 'static')
    
    

    error

    Traceback (most recent call last):
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/base.py", line 323, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 60, in execute
        super().execute(*args, **options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/base.py", line 364, in execute
        output = self.handle(*args, **options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 95, in handle
        self.run(**options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 104, in run
        self.inner_run(None, **options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 137, in inner_run
        handler = self.get_handler(*args, **options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/runserver.py", line 27, in get_handler
        handler = super().get_handler(*args, **options)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 64, in get_handler
        return get_internal_wsgi_application()
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/servers/basehttp.py", line 45, in get_internal_wsgi_application
        return import_string(app_path)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/utils/module_loading.py", line 17, in import_string
        module = import_module(module_path)
      File "/Users/rikasai/.pyenv/versions/3.9.11/lib/python3.9/importlib/__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
      File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
      File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 850, in exec_module
      File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
      File "/Users/rikasai/code/python/FasterRunner/FasterRunner/wsgi.py", line 16, in <module>
        application = get_wsgi_application()
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
        return WSGIHandler()
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/handlers/wsgi.py", line 135, in __init__
        self.load_middleware()
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/core/handlers/base.py", line 37, in load_middleware
        mw_instance = middleware(handler)
      File "/Users/rikasai/.virtualenvs/fast39/lib/python3.9/site-packages/django/contrib/staticfiles/finders.py", line 215, in __init__
        self.storage = self.storage()
    TypeError: inner() missing 1 required positional argument: 'request'
    
    
    opened by lihuacai168 0
Compresses linked and inline javascript or CSS into a single cached file.

Django Compressor Django Compressor processes, combines and minifies linked and inline Javascript or CSS in a Django template into cacheable static fi

null 2.6k Jan 3, 2023
Compresses linked and inline javascript or CSS into a single cached file.

Django Compressor Django Compressor processes, combines and minifies linked and inline Javascript or CSS in a Django template into cacheable static fi

null 2.6k Jan 3, 2023
A django compressor tool that bundles css, js files to a single css, js file with webpack and updates your html files with respective css, js file path.

django-webpacker's documentation: Introduction: django-webpacker is a django compressor tool which bundles css, js files to a single css, js file with

MicroPyramid 72 Aug 18, 2022
JavaScript Raider is a coverage-guided JavaScript fuzzing framework designed for the v8 JavaScript engine

JavaScript Raider is a coverage-guided JavaScript fuzzing framework designed for the v8 JavaScript engine

null 105 Dec 5, 2022
Cached file system for online resources in Python

Minato Cache & file system for online resources in Python Features Minato enables you to: Download & cache online recsources minato supports the follo

Yasuhiro Yamaguchi 10 Jan 4, 2023
`charts.css.py` brings `charts.css` to Python. Online documentation and samples is available at the link below.

charts.css.py charts.css.py provides a python API to convert your 2-dimension data lists into html snippet, which will be rendered into charts by CSS,

Ray Luo 3 Sep 23, 2021
An extremely fast JavaScript and CSS bundler and minifier

Website | Getting started | Documentation | Plugins | FAQ Why? Our current build tools for the web are 10-100x slower than they could be: The main goa

Evan Wallace 34.2k Jan 4, 2023
Build GUI for your Python program with JavaScript, HTML, and CSS

https://pywebview.flowrl.com pywebview is a lightweight cross-platform wrapper around a webview component that allows to display HTML content in its o

Roman 3.3k Jan 1, 2023
Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.

Introduction Swagger UI allows anyone — be it your development team or your end consumers — to visualize and interact with the API’s resources without

Swagger 23.2k Dec 29, 2022
Fully reponsive Chat Application built with django, javascript, materialUi, bootstrap4, html and css.

Chat app (Full Stack Frameworks with Django Project) Fully reponsive Chat Application built with django, javascript, materialUi, bootstrap4, html and

null 1 Jan 19, 2022
We'll be using HTML, CSS and JavaScript for the frontend

We'll be using HTML, CSS and JavaScript for the frontend. Nothing to install in specific. Open your text-editor and start coding a beautiful front-end.

Mugada sai tilak 1 Dec 15, 2021
Learn to build a Python Desktop GUI app using pywebview, Python, JavaScript, HTML, & CSS.

Python Desktop App Learn how to make a desktop GUI application using Python, JavaScript, HTML, & CSS all thanks to pywebview. pywebview is essentially

Coding For Entrepreneurs 55 Jan 5, 2023
Looks for Bitcoin Wallets starting 1 compresses and Uncompressesed, segwit address and MultiSig starting 3.

Looks for Bitcoin Wallets starting 1 compresses and Uncompressesed, segwit address and MultiSig starting 3. Pick your starting and stop numbers to start looking. Need a database of addresses to check. Made with https://pypi.org/project/PySimpleGUI/

null 10 Dec 22, 2022
cssOrganizer - organize a css file by grouping them into categories

This python project was created to scan through a CSS file and produce a more organized CSS file by grouping related CSS Properties within selectors. Created in my spare time for fun and my own utility. It takes in a style.css file and creates a file called 'organized-style.css.

Andrew Espindola 0 Aug 31, 2022
iOS Snapchat parser for chats and cached files

ParseSnapchat iOS Snapchat parser for chats and cached files Tested on Windows and Linux install required libraries: pip install -r requirements.txt c

null 11 Dec 5, 2022
A Sublime Text plugin that displays inline images for single-line comments formatted like `// ![](example.png)`.

Inline Images Sometimes ASCII art is not enough. Sometimes an image says more than a thousand words. This Sublime Text plugin can display images inlin

Andreas Haferburg 8 Jul 1, 2022
Alpkunt 9 Sep 9, 2022
HtmlWebShot - A python3 package which Can Create Images From url, Html-CSS, Svg and from any readable file and texts with many setup features.

A python3 package which Can Create Images From url, Html-CSS, Svg and from any readable file and texts with many setup features

Danish 24 Dec 14, 2022
A program that takes Python classes and turns them into CSS classes.

PyCSS What is it? PyCSS is a micro-framework to speed up the process of writing bulk CSS classes. How does it do it? With Python!!! First download the

T.R Batt 0 Aug 3, 2021