From a4675d1a9ec772513b529698bb203349f701cf81 Mon Sep 17 00:00:00 2001 From: Joakim Soderlund Date: Sat, 18 Nov 2017 21:09:39 +0100 Subject: [PATCH] Include package data in dist --- setup.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 50fc570..236926e 100755 --- a/setup.py +++ b/setup.py @@ -23,13 +23,59 @@ Setuptools for Fimfarchive. # -from setuptools import setup, find_packages +import os +from typing import Iterable, List, Tuple + +from setuptools import setup from fimfarchive import __version__ +PACKAGE = 'fimfarchive' + + +def to_name(path: str) -> str: + """ + Converts path to a package name. + """ + return path.replace(os.path.sep, '.') + + +def iter_package_paths() -> Iterable[str]: + """ + Yields all package paths to install. + """ + for dirpath, dirnames, filenames in os.walk(PACKAGE): + if '__init__.py' in filenames: + yield dirpath + + +def iter_package_names() -> Iterable[str]: + """ + Yields all package names to install. + """ + for dirpath in iter_package_paths(): + yield to_name(dirpath) + + +def iter_package_data() -> Iterable[Tuple[str, List[str]]]: + """ + Yields all package data to install. + """ + for dirpath in iter_package_paths(): + filenames = [ + filename for filename in os.listdir(dirpath) + if os.path.isfile(os.path.join(dirpath, filename)) + and not filename.endswith('.py') + ] + + if filenames: + yield to_name(dirpath), filenames + + setup( name="fimfarchive", version=__version__, - packages=find_packages(exclude=['tests', 'tests.*']), + packages=list(iter_package_names()), + package_data=dict(iter_package_data()), )