From 9413e7b590b010583e36ec5589a8484edada15d2 Mon Sep 17 00:00:00 2001 From: Peter Bittner Date: Sun, 10 Apr 2016 23:40:16 +0200 Subject: [PATCH] Add long_description and custom clean command (setup.py) --- README.rst | 4 ++++ setup.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 8e255d8..04a6f49 100644 --- a/README.rst +++ b/README.rst @@ -34,6 +34,10 @@ No prerequisites are required, all test dependencies will be installed automatically by ``tox`` in virtual environments created on the fly. Unfortunately, you'll have to install ``virtualenv`` for this to work, though. +To remove all build files and folders including Python byte code you can run:: + + $ python setup.py clean + .. |latest-version| image:: https://img.shields.io/pypi/v/django-todo.svg :alt: Latest version on PyPI diff --git a/setup.py b/setup.py index 4bf0074..58e305c 100755 --- a/setup.py +++ b/setup.py @@ -1,9 +1,13 @@ #!/usr/bin/env python +from glob import glob +from os import remove +from os.path import abspath, dirname, join from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand -import shlex -import sys +from shlex import split +from shutil import rmtree +from sys import exit import todo as package @@ -24,14 +28,55 @@ class Tox(TestCommand): import tox args = self.tox_args if args: - args = shlex.split(self.tox_args) + args = split(self.tox_args) errno = tox.cmdline(args=args) - sys.exit(errno) + exit(errno) + + +class Clean(TestCommand): + def run(self): + delete_in_root = [ + 'build', + 'dist', + '.eggs', + '*.egg-info', + '.tox', + ] + delete_everywhere = [ + '__pycache__', + '*.pyc', + ] + for candidate in delete_in_root: + rmtree_glob(candidate) + for visible_dir in glob('[A-Za-z0-9]*'): + for candidate in delete_everywhere: + rmtree_glob(join(visible_dir, candidate)) + rmtree_glob(join(visible_dir, '*', candidate)) + rmtree_glob(join(visible_dir, '*', '*', candidate)) + + +def rmtree_glob(file_glob): + for fobj in glob(file_glob): + try: + rmtree(fobj) + print('%s/ removed ...' % fobj) + except OSError: + try: + remove(fobj) + print('%s removed ...' % fobj) + except OSError: + pass + + +def read_file(*pathname): + with open(join(dirname(abspath(__file__)), *pathname)) as f: + return f.read() setup( name='django-todo', version=package.__version__, description=package.__doc__.strip(), + long_description=read_file('README.rst'), author=package.__author__, author_email=package.__email__, url=package.__url__, @@ -54,6 +99,7 @@ setup( zip_safe=False, tests_require=['tox'], cmdclass={ + 'clean': Clean, 'test': Tox, }, )