Permalink
Browse files

added setup.py Issue 187

  • Loading branch information...
1 parent 2ddb4c5 commit a0c4db6a1b170d62cc6c121db8fcb79e45d09764 @hpoul committed Dec 26, 2009
Showing with 142 additions and 0 deletions.
  1. +99 −0 finddata.py
  2. +43 −0 setup.py
View
@@ -0,0 +1,99 @@
+# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
+# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
+# Note: you may want to copy this into your setup.py file verbatim, as
+# you can't import this from another package, when you don't know if
+# that package is installed yet.
+
+import os
+import sys
+from fnmatch import fnmatchcase
+from distutils.util import convert_path
+
+# Provided as an attribute, so you can append to these instead
+# of replicating them:
+standard_exclude = ('*.py', '*.pyc', '*$py.class', '*~', '.*', '*.bak')
+standard_exclude_directories = ('.*', 'CVS', '_darcs', './build',
+ './dist', 'EGG-INFO', '*.egg-info')
+
+def find_package_data(
+ where='.', package='',
+ exclude=standard_exclude,
+ exclude_directories=standard_exclude_directories,
+ only_in_packages=True,
+ show_ignored=False):
+ """
+ Return a dictionary suitable for use in ``package_data``
+ in a distutils ``setup.py`` file.
+
+ The dictionary looks like::
+
+ {'package': [files]}
+
+ Where ``files`` is a list of all the files in that package that
+ don't match anything in ``exclude``.
+
+ If ``only_in_packages`` is true, then top-level directories that
+ are not packages won't be included (but directories under packages
+ will).
+
+ Directories matching any pattern in ``exclude_directories`` will
+ be ignored; by default directories with leading ``.``, ``CVS``,
+ and ``_darcs`` will be ignored.
+
+ If ``show_ignored`` is true, then all the files that aren't
+ included in package data are shown on stderr (for debugging
+ purposes).
+
+ Note patterns use wildcards, or can be exact paths (including
+ leading ``./``), and all searching is case-insensitive.
+ """
+
+ out = {}
+ stack = [(convert_path(where), '', package, only_in_packages)]
+ while stack:
+ where, prefix, package, only_in_packages = stack.pop(0)
+ for name in os.listdir(where):
+ fn = os.path.join(where, name)
+ if os.path.isdir(fn):
+ bad_name = False
+ for pattern in exclude_directories:
+ if (fnmatchcase(name, pattern)
+ or fn.lower() == pattern.lower()):
+ bad_name = True
+ if show_ignored:
+ print >> sys.stderr, (
+ "Directory %s ignored by pattern %s"
+ % (fn, pattern))
+ break
+ if bad_name:
+ continue
+ if (os.path.isfile(os.path.join(fn, '__init__.py'))
+ and not prefix):
+ if not package:
+ new_package = name
+ else:
+ new_package = package + '.' + name
+ stack.append((fn, '', new_package, False))
+ else:
+ stack.append((fn, prefix + name + '/', package, only_in_packages))
+ elif package or not only_in_packages:
+ # is a file
+ bad_name = False
+ for pattern in exclude:
+ if (fnmatchcase(name, pattern)
+ or fn.lower() == pattern.lower()):
+ bad_name = True
+ if show_ignored:
+ print >> sys.stderr, (
+ "File %s ignored by pattern %s"
+ % (fn, pattern))
+ break
+ if bad_name:
+ continue
+ out.setdefault(package, []).append(prefix+name)
+ return out
+
+if __name__ == '__main__':
+ import pprint
+ pprint.pprint(
+ find_package_data(show_ignored=True))
View
@@ -0,0 +1,43 @@
+#
+# Setup file for Sphene Community Tools
+# Provided by Dennis @ allymbrain.com:
+# http://allmybrain.com/2009/10/21/the-python-install-system-needs-an-overhaul/
+#
+
+import os
+from setuptools import setup, find_packages
+from finddata import find_package_data
+
+packages=find_packages('sphenecoll')
+package_data=find_package_data('sphenecoll')
+static = find_package_data('static','sphene')
+# not in correct format
+static_dict={} # dir -> files
+for path in static['sphene']:
+ dir, file = os.path.split(path)
+ dir = os.path.join('static', dir )
+ files = static_dict.setdefault( dir, [] )
+ files.append(os.path.join('static',path))
+
+setup(
+ name='Sphene Community Tools',
+ version='0.6dev',
+ author = 'Herbert Poul',
+ author_email = 'herbert.poul@gmail.com',
+ url = 'http://sct.sphene.net/',
+ description = 'SCT (Sphene Community Tools) is a collection of Django applications. It currently consists of a Wiki and Forum application which are applicable for communities, support forums, blogs, etc.',
+ long_description = '''SCT (Sphene Community Tools) is a collection of Django applications that are
+designed to be easily pluggable into any Django project. It currently consists
+of a Wiki and a Forum application. It contains an example project that allows
+users to create a community Web site containing the Wiki and Board applications
+without any further coding/configuration changes.''',
+
+
+ packages=packages,
+ package_data=package_data,
+ package_dir={'sphene':'sphenecoll/sphene'},
+ # these scripts are only required before creating distribution... no need to install them.
+ #scripts=['dist/scripts/make-messages.py', 'dist/scripts/compile-all-sph-messages.py' ],
+ data_files=static_dict.items()
+)
+

0 comments on commit a0c4db6

Please sign in to comment.