#!/usr/bin/python
# -*- coding: utf-8 -*-

from distutils.core import setup
import os


def _do_list_dir(top_dir, base_dir):
    top_dir = os.path.realpath(top_dir)
    print "top : ", top_dir
    base_dir = os.path.realpath(base_dir)
    all_files = os.listdir(base_dir)
    modules = []
    for f in all_files:
        fname = os.path.join(base_dir, f)
        if os.path.isfile(fname):
            ext = f.split('.')[-1]
            if ext == 'py':
                p = base_dir.find(top_dir)
                mod = os.path.join(base_dir[p + len(top_dir) + 1:], f)
                modules.append(mod)
        elif os.path.isdir(fname):
            modules += _do_list_dir(top_dir, fname)
    return modules


def find_all_dist_module():
    base_dir = 'supwisdom'
    return _do_list_dir(base_dir, base_dir)

#print find_all_dist_module()

setup(
    name='swtools',
    version="0.1",
    description="Supwisdom python libraries",
    author='Cheng Tang',
    author_email='cheng.tang@supwisdom.com',
    platforms=['All'],
    packages=['supwisdom', 'supwisdom.protocol']
    )
