setup.py 4.73 KB
Newer Older
lambdamusic's avatar
lambdamusic committed
1 2 3 4 5
from setuptools import setup, find_packages  # Always prefer setuptools over distutils
from codecs import open  # To use a consistent encoding
from os import path
import os

lambdamusic's avatar
lambdamusic committed
6
HERE = path.abspath(path.dirname(__file__))
7 8 9 10

# trick to manage package versions in one place only
# http://stackoverflow.com/questions/458550/standard-way-to-embed-version-into-python-package
import re
lambdamusic's avatar
lambdamusic committed
11
VERSIONFILE="ontospy/VERSION.py"
12 13 14 15 16 17 18
verstrline = open(VERSIONFILE, "rt").read()
VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
mo = re.search(VSRE, verstrline, re.M)
if mo:
    VERSIONSTRING = mo.group(1)
else:
    raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,))
19

lambdamusic-work's avatar
lambdamusic-work committed
20 21


lambdamusic's avatar
lambdamusic committed
22
# Get the long description from the README file
lambdamusic's avatar
lambdamusic committed
23
with open(path.join(HERE, 'README.md'), encoding='utf-8') as f:
lambdamusic's avatar
lambdamusic committed
24 25
    long_description = f.read()

lambdamusic's avatar
lambdamusic committed
26

lambdamusic's avatar
lambdamusic committed
27
# Parse requirements.txt file so to have one single source of truth
lambdamusic's avatar
lambdamusic committed
28
REQUIREMENTS_DATA = []
lambdamusic's avatar
lambdamusic committed
29
with open(path.join(HERE, 'requirements.txt'), encoding='utf-8') as f:
lambdamusic's avatar
lambdamusic committed
30 31
    for l in f.readlines():
        if not l.startswith("#"):
lambdamusic's avatar
lambdamusic committed
32
            if (">=" in l):
lambdamusic's avatar
lambdamusic committed
33 34 35
                REQUIREMENTS_DATA.append([l.split(">=")[0]])
            elif ("=" in l):
                REQUIREMENTS_DATA.append([l.split("=")[0]])
lambdamusic's avatar
lambdamusic committed
36

lambdamusic's avatar
lambdamusic committed
37

lambdamusic's avatar
lambdamusic committed
38

lambdamusic's avatar
lambdamusic committed
39

lambdamusic's avatar
lambdamusic committed
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
def get_package_folders(top_folder, root_path):
    """
    Utility to generate dynamically the list of folders needed by the package_data setting
    ..
        package_data={
             'ontospy': ['viz/static/*.*', 'viz/templates/*.*', 'viz/templates/shared/*.*', 'viz/templates/splitter/*.*', 'viz/templates/markdown/*.*'],
        },
    ...
    """
    _dirs = []
    out = []
    for root, dirs, files in os.walk(top_folder):
        for dir in dirs:
            _dirs.append(os.path.join(root, dir))
    for d in _dirs:
        _d = os.path.join(d, "*.*")
        out.append(_d.replace(root_path+"/", ""))
    return out


lambdamusic's avatar
lambdamusic committed
60 61 62 63 64 65 66 67 68 69 70

PROJECT_ROOT = os.path.join(HERE, "ontospy") # should be top level always
DATA_STATIC_FILES = os.path.join(PROJECT_ROOT, "ontodocs", "media", "static")
DATA_TEMPLATE_FILES = os.path.join(PROJECT_ROOT, "ontodocs", "media", "templates")
# dynamically generate list of data folders
PACKAGE_DATA_FOLDERS = get_package_folders(
    DATA_STATIC_FILES, PROJECT_ROOT) + get_package_folders(
        DATA_TEMPLATE_FILES, PROJECT_ROOT)

if True:
    print(PACKAGE_DATA_FOLDERS)
71

lambdamusic's avatar
lambdamusic committed
72 73


lambdamusic's avatar
lambdamusic committed
74 75
setup(
    name='ontospy',
76
    version=VERSIONSTRING,
lambdamusic's avatar
lambdamusic committed
77 78
    description=
    'Query, inspect and visualize knowledge models encoded as RDF/OWL ontologies.',
lambdamusic's avatar
lambdamusic committed
79
    long_description=long_description,
lambdamusic's avatar
lambdamusic committed
80
    long_description_content_type='text/markdown',
lambdamusic's avatar
lambdamusic committed
81
    url='https://github.com/lambdamusic/ontospy',
lambdamusic's avatar
lambdamusic committed
82 83 84 85 86 87 88 89 90
    author='Michele Pasin',
    author_email='michele.pasin@gmail.com',
    license='MIT',
    # See https://pypi.python.org/pypi?%3Aaction=list_classifiers
    classifiers=[
        # How mature is this project? Common values are
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
lambdamusic's avatar
lambdamusic committed
91
        'Development Status :: 5 - Production/Stable',
lambdamusic's avatar
lambdamusic committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

        # Indicate who your project is intended for
        'Intended Audience :: Science/Research',
        'Intended Audience :: Developers',
        'Topic :: Scientific/Engineering :: Artificial Intelligence',

        # Pick your license as you wish (should match "license" above)
        'License :: OSI Approved :: MIT License',

        # Specify the Python versions you support here. In particular, ensure
        # that you indicate whether you support Python 2, Python 3 or both.
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.2',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
lambdamusic's avatar
lambdamusic committed
107 108 109
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
lambdamusic's avatar
lambdamusic committed
110
    ],
lambdamusic's avatar
lambdamusic committed
111
    keywords='ontology semantic web linked data rdf owl',
lambdamusic's avatar
lambdamusic committed
112 113 114 115
    packages=find_packages(exclude=['contrib', 'docs', 'tests*']),
    # List run-time dependencies here.  These will be installed by pip when your
    # project is installed. For an analysis of "install_requires" vs pip's
    # requirements files see:
116
    # http://python-packaging-user-guide.readthedocs.org/en/latest/requirements/
lambdamusic's avatar
lambdamusic committed
117
    # NOTE: packages are installed in reverse order
lambdamusic's avatar
lambdamusic committed
118
    install_requires=REQUIREMENTS_DATA,
lambdamusic's avatar
lambdamusic committed
119 120 121
    # List additional groups of dependencies here (e.g. development dependencies).
    # You can install these using the following syntax, for example:
    # $ pip install -e .[dev,test]
lambdamusic's avatar
lambdamusic committed
122
    extras_require={
lambdamusic's avatar
lambdamusic committed
123
        'SHELL': ['readline'],
lambdamusic's avatar
lambdamusic committed
124
        'FULL': ['Django>=1.10.3', 'Pygments==2.1.3'],
lambdamusic's avatar
lambdamusic committed
125
    },
lambdamusic's avatar
lambdamusic committed
126
    package_data={
lambdamusic's avatar
lambdamusic committed
127
        'ontospy': PACKAGE_DATA_FOLDERS
lambdamusic's avatar
lambdamusic committed
128
        },
lambdamusic's avatar
lambdamusic committed
129 130
    entry_points={
        'console_scripts': [
131
            # 'ontospy-sketch=ontospy.extras.sketch:main',
lambdamusic's avatar
lambdamusic committed
132
            'ontospy=ontospy.cli:main_cli'
lambdamusic's avatar
lambdamusic committed
133 134 135
        ],
    },
)