123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- # -*- coding: utf-8 -*-
- import fnmatch
- import os
- from os.path import join as _j
- from django.conf import settings
- from django.core.management.base import BaseCommand, CommandError
- from django_extensions.management.utils import signalcommand
- class Command(BaseCommand):
- help = "Removes all python bytecode compiled files from the project."
- requires_system_checks = False
- def add_arguments(self, parser):
- parser.add_argument(
- '--optimize', '-o', '-O', action='store_true',
- dest='optimize', default=False,
- help='Remove optimized python bytecode files'
- )
- parser.add_argument(
- '--path', '-p', action='store', dest='path',
- help='Specify path to recurse into'
- )
- @signalcommand
- def handle(self, *args, **options):
- project_root = options.get("path", getattr(settings, 'BASE_DIR', None))
- if not project_root:
- project_root = getattr(settings, 'BASE_DIR', None)
- verbosity = options["verbosity"]
- if not project_root:
- raise CommandError("No --path specified and settings.py does not contain BASE_DIR")
- exts = options["optimize"] and "*.py[co]" or "*.pyc"
- for root, dirs, filenames in os.walk(project_root):
- for filename in fnmatch.filter(filenames, exts):
- full_path = _j(root, filename)
- if verbosity > 1:
- self.stdout.write("%s\n" % full_path)
- os.remove(full_path)
|