Skip to main content

miscellaneous tools for django

Project description

Miscellaneous tools for django.

Build Status on travis-ci.org

travis-ci.org/jedie/django-tools

Coverage Status on coveralls.io

coveralls.io/r/jedie/django-tools

Status on landscape.io

landscape.io/github/jedie/django-tools/master

existing stuff

Filemanager library

Library for building django application like filemanager, gallery etc.

more info, read ./filemanager/README.creole

per-site cache middleware

Similar to django UpdateCacheMiddleware and FetchFromCacheMiddleware, but has some enhancements: ‘per site cache’ in ./cache/README.creole

smooth cache backends

Same as django cache backends, but adds cache.smooth_update() to clears the cache smoothly depend on the current system load. more info in: ‘smooth cache backends’ in ./cache/README.creole

local sync cache

Keep a local dict in a multi-threaded environment up-to-date. Usefull for cache dicts. More info, read DocString in ./local_sync_cache/local_sync_cache.py.

threadlocals middleware

For getting request object anywhere, use ./middlewares/ThreadLocal.py

Dynamic SITE_ID middleware

Set settings.SITE_ID dynamically with a middleware base on the current request domain name. Domain name alias can be specify as a simple string or as a regular expression.

more info, read ./dynamic_site/README.creole.

StackInfoStorage

Message storage like LegacyFallbackStorage, except, every message would have a stack info, witch is helpful, for debugging. Stack info would only be added, if settings DEBUG or MESSAGE_DEBUG is on. To use it, put this into your settings:

MESSAGE_STORAGE = "django_tools.utils.messages.StackInfoStorage"

More info, read DocString in ./utils/messages.py.

limit to usergroups

Limit something with only one field, by selecting:

  • anonymous users

  • staff users

  • superusers

  • ..all existing user groups..

More info, read DocString in ./limit_to_usergroups.py

unittests helpers

BaseUnittestCase

django_tools.unittest_utils.unittest_base.BaseUnittestCase contains some low-level assert methods:

  • assertEqual_dedent()

  • assert_is_dir(), assert_not_is_dir()

  • assert_is_file(), assert_not_is_File()

django_tools.unittest_utils.tempdir contains TempDir, a Context Manager Class:

with TempDir(prefix="foo_") as tempfolder:
    # create a file:
    open(os.path.join(tempfolder, "bar"), "w").close()

# the created temp folder was deleted with shutil.rmtree()

usage/tests:

DOM compare in unittests

The Problem: You can’t easy check if e.g. some form input fields are in the reponse, because the form rendering use a dict for storing all html attributes. So, the ordering of form field attributes are not sorted and varied.

The Solution: You need to parse the response content into a DOM tree and compare nodes.

We add the gread work of Gregor Müllegger at his GSoC 2011 form-rendering branch. You will have the following assert methods inherit from: django_tools.unittest_utils.unittest_base.BaseTestCase

  • self.assertHTMLEqual() – for compare two HTML DOM trees

  • self.assertDOM() – for check if nodes in response or not.

  • self.assertContains() – Check if ond node occurs ‘count’ times in response

More info and examples in ./tests/test_dom_asserts.py

small tools

debug_csrf_failure()

Display the normal debug page and not the minimal csrf debug page. More info in DocString here: django_tools/views/csrf.py

import lib helper

additional helper to the existing django.utils.importlib more info in the sourcecode: ./utils/importlib.py

http utils

Pimped HttpRequest to get some more information about a request. More info in DocString here: django_tools/utils/http.py

upgrade virtualenv

A simple commandline script that calls pip install —-upgrade XY for every package thats installed in a virtualenv. Simply copy/symlink it into the root directory of your virtualenv and start it.

Note: Seems that this solution can’t observe editables right.

To use it, without installing django-tools:

~/$ cd goto/your_env
.../your_env/$ wget https://github.com/jedie/django-tools/raw/master/django_tools/upgrade_virtualenv.py
.../your_env/$ chmod +x upgrade_virtualenv.py
.../your_env/$ ./upgrade_virtualenv.py

This script will be obsolete, if pip has a own upgrade command.

SignedCookieStorage

Store information in signed Cookies, use django.core.signing. So the cookie data can’t be manipulated from the client. Sources/examples:

SetRequestDebugMiddleware

middleware to add debug bool attribute to request object. More info: ./debug/README.creole

InternalIps() - Unix shell-style wildcards in INTERNAL_IPS

settings.py e.g.:

from django_tools.settings_utils import InternalIps

INTERNAL_IPS = InternalIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"])

..all others…

There exist many miscellaneous stuff. Look in the source, luke!

Backwards-incompatible changes

v0.29

ClientCookieStorage was renamed to SignedCookieStorage import e.g.:

from django_tools.utils.client_storage import SignedCookieStorage

v0.25.0

SmoothCacheBackends API changed: The cache.clear() method will really clear the cache, as the origin backend API. You must call cache.smooth_update() to set the “last change” timestamp.

v0.24.10

AutoUpdateFileBasedCache is deprecated, use new SmoothCacheBackends.

v0.9

Language code field and SelectMediaPath are renamed.

change: from django_tools.fields import LanguageCodeFormField to: from django_tools.fields.language_code import LanguageCodeFormField

change and rename: from django_tools.fields import LanguageCodeField to: from django_tools.fields.language_code import LanguageCodeModelField

change and rename: from django_tools.widgets import SelectMediaPath to: from django_tools.fields.media_path import MediaPathWidget

Django compatibility

django-tools

django version

v0.26

<=1.6

v0.25

<=1.4

history

  • v0.29.0 - dev - not released, yet

    • Refactor unittests

    • catch more directory traversal attacks in BaseFilesystemBrowser

    • Bugfix for “django.core.exceptions.AppRegistryNotReady: Models aren’t loaded yet.” if using UpdateInfoBaseModel

    • Bugfixes in dynamic_site for django 1.7

    • add: django_tools.settings_utils.InternalIps

  • v0.28.0 - 12.02.2015

    • Work-a-round for import loops

    • (new Version number, because of PyPi stress)

  • v0.26.0 - 11.02.2015

    • Updates for Django 1.6 and Python 3

  • v0.25.1 - 18.11.2013

    • Bugfix: Fall back to “UTF-8” if server send no encoding info

  • v0.25.0 - 28.08.2012

    • Rename cache.clear() in SmoothCacheBackends to cache.smooth_update(), so that reset timestamp is independ from clear the cache.

  • v0.24.10 - 24.08.2012

  • v0.24.9 - 24.08.2012

    • Bugfix in per-site cache middleware: set inital count values to None, if counting is disabled.

  • v0.24.8 - 24.08.2012

  • v0.24.7 - 21.08.2012

  • v0.24.6 - 21.08.2012

    • Add the filemanager library (see above)

  • v0.24.5 - 06.08.2012

    • Add Print SQL Queries context manager. (see above)

  • v0.24.4 - 26.07.2012

    • remove date from version string, cause of side-effects e.g.: user clone the repo and has the filter not installed

  • v0.24.3 - 25.07.2012

  • v0.24.2 - 10.07.2012

    • Split UpdateInfoBaseModel(): So you can only set “createtime”, “lastupdatetime” or “createby”, “lastupdateby” or both types (This is backwards compatible)

  • v0.24.1 - 12.06.2012

    • Bugfix: UsergroupsModelField() and add unittests for it

    • Add “normal users” in UsergroupsModelField()

    • New: Add create_user() and create_testusers() to BaseTestCase

    • Add a test project for the unittests. TODO: use this for all tests

  • v0.24.0 - 04.06.2012

  • v0.23.1

    • Dynamic Site would be only initialised if settings.USE_DYNAMIC_SITE_MIDDLEWARE = True

  • v0.23.0

    • Use cryptographic signing tools from django 1.4 in django_tools.utils.client_storage

  • v0.22.0

    • Add static_path.py thats used settings.STATIC_ROOT.

    • The old media_path.py which used settings.MEDIA_ROOT is deprecated and will be removed in the future.

    • auto_add_check_unique_together() can use settings.DATABASES[“default”][“ENGINE”], too.

  • v0.21.1

  • v0.21.0beta

    • New: site alias function

    • refractory ‘DynamicSiteMiddleware’ to a own app (Backwards-incompatible change: change your settings if you use the old DynamicSiteMiddleware.)

  • v0.20.1

  • v0.20.0

  • v0.19.6

    • Add some south introspection rules for LanguageCodeModelField and jQueryTagModelField

    • fallback if message for anonymous user can’t created, because django.contrib.messages middleware not used.

    • Bugfix in django_tools.utils.messages.StackInfoStorage

  • v0.19.5

  • v0.19.4

    • Bugfix for PyPy in local_sync_cache get_cache_information(): sys.getsizeof() not implemented on PyPy

    • Bugfix in template.filters.chmod_symbol()

    • Nicer solution for template.filters.human_duration()

  • v0.19.3

    • Add support for https in utils/http.py

  • v0.19.2

    • Bugfix in utils/http.py timeout work-a-round

  • v0.19.1

    • utils/http.py changes:

      • Use a better solution, see:

      • Add timeout and add a work-a-round for Python < 2.6

  • v0.19.0

    • NEW: Add utils/http.py with helpers to get a webpage via http GET in unicode

    • Change README from textile to creole ;)

  • v0.18.2

    • Bugfix: Add missing template in pypi package

  • v0.18.0

    • NEW: Add DOM compare from Gregor Müllegger GSoC work into unittest utils.

  • v0.17.1

    • Bugfix in “limit_to_usergroups”: Make choices “lazy”: Don’t access the database in init

  • v0.17

    • Add the script “upgrade_virtualenv.py”

    • Add “limit_to_usergroups”

    • Add “local sync cache”

    • Add models.UpdateInfoBaseModel

    • Update decorators.render_to

    • render_to pass keyword arguments to render_to_response() (e.g.: mimetype=“text/plain”)

    • new argument “skip_fail” in get_filtered_apps(): If True: raise excaption if app is not importable

  • v0.16.4

    • Bugfix: get_db_prep_save() got an unexpected keyword argument 'connection’ when save a SignSeparatedModelField()

  • v0.16.3

    • Update BrowserDebug: Use response.templates instead of response.template and make output nicer

  • v0.16.2

    • Merge stack info code and display better stack info on browser debug page

  • v0.16.1

    • Update django_tools.utils.messages.StackInfoStorage for django code changes.

  • v0.16.0

    • NEW: path model field (check if direcotry exist)

  • v0.15.0

    • NEW: Add a flexible URL field (own validator, model- and form-field)

  • v0.14.1

    • Bugfix: make path in MediaPathModelField relativ (remove slashes)

  • v0.14

    • NEW: django-tagging addon: Display existing tags under a tag field

  • v0.13

    • Bugfix UnicodeEncodeError in Browser debug

  • v0.12

    • NEW: django_tools.utils.messages.failsafe_message

  • v0.11

    • NEW: Store data in a secure cookie, see: utils/client_storage.py

  • v0.10.1

    • New: Display used templates in unittest BrowserDebug

    • Bugfix: catch if last usermessages exist

  • v0.10.0

    • NEW: utils around django messages, see: /django_tools/utils/messages.py

  • v0.9.1

    • Bugfix: database column was not created: don’t overwrite get_internal_type()

  • v0.9

    • New: stuff in /django_tools/fields/

    • see also backwards-incompatible changes, above!

  • v0.8.2

    • New: widgets.SelectMediaPath(): Select a sub directory in settings.MEDIA_ROOT

    • New: fields.SignSeparatedField()

  • v0.8.1

    • Add “no_args” keyword argument to installed_apps_utils.get_filtered_apps()

  • v0.8.0

    • Add model LanguageCode field and form LanguageCode field in Accept-Language header format (RFC 2616)

  • v0.7.0

    • Add decorators.py

  • v0.6.0

  • v0.5.0

    • Add template/filters.py from PyLucid v0.8.x

  • v0.4.0

    • Add experimental “warn_invalid_template_vars”

  • v0.3.1

    • Bugfix: Exclude the instance if it was saved in the past.

  • v0.3.0

    • Add utils.installed_apps_utils

  • v0.2.0

  • v0.1.0

pip upgrade

To do a pip upgrade in a virtual environment, run this:

~$ cd /YourVirtualEnv/bin
~/YourVirtualEnv/bin$ source activate
(YourVirtualEnv)~/YourVirtualEnv/bin$ pip install --upgrade --verbose --editable=git+git://github.com/jedie/django-tools.git#egg=django-tools

The example used git readonly clone url. If you use subversion do this:

(YourVirtualEnv)~/YourVirtualEnv/bin$ pip install --upgrade --verbose --editable=http://svn.github.com/jedie/django-tools.git#egg=django-tools

If you have git write access, use this:

(YourVirtualEnv)~/YourVirtualEnv/bin$ pip install --upgrade --verbose --editable=git+git@github.com:jedie/django-tools.git#egg=django-tools

…or just use our limit_to_usergroups.py script (see above)

fast repo update

To made a fast repository update, you can run this simple shell script:

~$ cd /path/to/django-tools
/path/to/django-tools$ ./update.sh

the update script runs “git pull origin master” or “svn update”.

Project details


Release history Release notifications | RSS feed

Supported by

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