[pkg] standard python package
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>
Wed, 02 May 2018 18:25:46 +0200
changeset 523 cbd338590fa4
parent 522 1db8a761fb8a
child 524 cdc8b5ada1a2
[pkg] standard python package
MANIFEST.in
debian/rules
python-nazca.spec
setup.py
--- a/MANIFEST.in	Wed May 02 17:16:48 2018 +0200
+++ b/MANIFEST.in	Wed May 02 18:25:46 2018 +0200
@@ -1,5 +1,5 @@
-recursive-include . *.py
-recursive-include debian *
+include setup.py
+include README
 include *.rst
-recursive-include test/data *
-recursive-include data *.txt
+recursive-include nazca *.py
+recursive-include nazca/data *.txt
--- a/debian/rules	Wed May 02 17:16:48 2018 +0200
+++ b/debian/rules	Wed May 02 18:25:46 2018 +0200
@@ -1,9 +1,4 @@
 #!/usr/bin/make -f
 
-export NO_SETUPTOOLS=1
-
 %:
 	dh $@ --with python2
-
-override_dh_auto_install:
-	dh_auto_install
--- a/python-nazca.spec	Wed May 02 17:16:48 2018 +0200
+++ b/python-nazca.spec	Wed May 02 18:25:46 2018 +0200
@@ -1,11 +1,5 @@
-# for el5, force use of python2.6
-%if 0%{?el5}
-%define python python26
-%define __python /usr/bin/python2.6
-%else
 %define python python
 %define __python /usr/bin/python
-%endif
 %{!?_python_sitelib: %define _python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
 
 Name:           %{python}-nazca
@@ -32,23 +26,12 @@
 %prep
 %setup -q -n nazca-%{version}
 
-
-%build
-%{__python} setup.py build
-%if 0%{?el5}
-# change the python version in shebangs
-find . -name '*.py' -type f -print0 |  xargs -0 sed -i '1,3s;^#!.*python.*$;#! /usr/bin/python2.6;'
-%endif
-
-
 %install
-rm -rf $RPM_BUILD_ROOT
-NO_SETUPTOOLS=1 %{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
+%{__python} setup.py --quiet install --no-compile --prefix=%{_prefix} --root="$RPM_BUILD_ROOT"
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-
 %files
-%defattr(-,root,root,-)
+%defattr(-, root, root)
 %{_python_sitelib}/*
--- a/setup.py	Wed May 02 17:16:48 2018 +0200
+++ b/setup.py	Wed May 02 18:25:46 2018 +0200
@@ -21,148 +21,56 @@
 """
 __docformat__ = "restructuredtext en"
 
-import os
-import sys
-import shutil
-from os.path import isdir, exists, join, dirname
+from os.path import join, dirname
 
-try:
-    if os.environ.get('NO_SETUPTOOLS'):
-        raise ImportError()
-    from setuptools import setup
-    from setuptools.command import install_lib
-    USE_SETUPTOOLS = 1
-except ImportError:
-    from distutils.core import setup
-    from distutils.command import install_lib
-    USE_SETUPTOOLS = 0
+from setuptools import find_packages, setup
 
-try:
-    # python3
-    from distutils.command.build_py import build_py_2to3 as build_py
-except ImportError:
-    # python2.x
-    from distutils.command.build_py import build_py
-
+here = dirname(__file__)
 
 # load metadata from the __pkginfo__.py file so there is no risk of conflict
 # see https://packaging.python.org/en/latest/single_source_version.html
-base_dir = dirname(__file__)
-
-pkginfo = {}
-with open(join(base_dir, "__pkginfo__.py")) as f:
-    exec(f.read(), pkginfo)
-
+pkginfo = join(here, 'nazca', '__pkginfo__.py')
+__pkginfo__ = {}
+with open(pkginfo) as f:
+    exec(f.read(), __pkginfo__)
 # get required metadatas
-modname = pkginfo['modname']
-version = pkginfo['version']
-license = pkginfo['license']
-description = pkginfo['description']
-web = pkginfo['web']
-author = pkginfo['author']
-author_email = pkginfo['author_email']
-classifiers = pkginfo['classifiers']
+distname = __pkginfo__['distname']
+version = __pkginfo__['version']
+license = __pkginfo__['license']
+description = __pkginfo__['description']
+web = __pkginfo__['web']
+author = __pkginfo__['author']
+author_email = __pkginfo__['author_email']
+classifiers = __pkginfo__['classifiers']
 
-with open(join(base_dir, 'README')) as f:
+with open(join(here, 'README')) as f:
     long_description = f.read()
 
 # get optional metadatas
-distname = pkginfo.get('distname', modname)
-scripts = pkginfo.get('scripts', ())
-include_dirs = pkginfo.get('include_dirs', ())
-data_files = pkginfo.get('data_files', None)
-ext_modules = pkginfo.get('ext_modules', None)
-dependency_links = pkginfo.get('dependency_links', ())
-
-if USE_SETUPTOOLS:
-    requires = {}
-    for entry in ("__depends__", "__recommends__"):
-        requires.update(pkginfo.get(entry, {}))
-    install_requires = [("%s %s" % (d, v and v or "")).strip()
-                       for d, v in requires.items()]
-else:
-    install_requires = []
-
-STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
-IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
+data_files = __pkginfo__.get('data_files', None)
+dependency_links = __pkginfo__.get('dependency_links', ())
 
-def ensure_scripts(linux_scripts):
-    """Creates the proper script names required for each platform
-    (taken from 4Suite)
-    """
-    from distutils import util
-    if util.get_platform()[:3] == 'win':
-        scripts_ = [script + '.bat' for script in linux_scripts]
-    else:
-        scripts_ = linux_scripts
-    return scripts_
-
-def get_packages(directory, prefix):
-    """return a list of subpackages for the given directory"""
-    result = []
-    for package in os.listdir(directory):
-        absfile = join(directory, package)
-        if isdir(absfile):
-            if exists(join(absfile, '__init__.py')) or \
-                   package in ('test', 'tests'):
-                if prefix:
-                    result.append('%s.%s' % (prefix, package))
-                else:
-                    result.append(package)
-                result += get_packages(absfile, result[-1])
-    return result
+requires = {}
+for entry in ("__depends__", ):
+    requires.update(__pkginfo__.get(entry, {}))
+install_requires = [
+    "{0} {1}".format(d, v and v or "").strip() for d, v in requires.items()
+]
 
-EMPTY_FILE = '''"""generated file, don't modify or your data will be lost"""
-try:
-    __import__('pkg_resources').declare_namespace(__name__)
-except ImportError:
-    pass
-'''
-
-class MyInstallLib(install_lib.install_lib):
-    """extend install_lib command to handle  package __init__.py and
-    include_dirs variable if necessary
-    """
-    def run(self):
-        """overridden from install_lib class"""
-        install_lib.install_lib.run(self)
-        # manually install included directories if any
-        if include_dirs:
-            base = modname
-            for directory in include_dirs:
-                dest = join(self.install_dir, base, directory)
-                shutil.rmtree(dest, ignore_errors=True)
-                shutil.copytree(directory, dest)
-
-def install(**kwargs):
-    """setup entry point"""
-    if USE_SETUPTOOLS:
-        if '--force-manifest' in sys.argv:
-            sys.argv.remove('--force-manifest')
-    # install-layout option was introduced in 2.5.3-1~exp1
-    elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
-        sys.argv.remove('--install-layout=deb')
-    kwargs['package_dir'] = {modname : '.'}
-    packages = [modname] + get_packages(os.getcwd(), modname)
-    if USE_SETUPTOOLS and install_requires:
-        kwargs['install_requires'] = install_requires
-        kwargs['dependency_links'] = dependency_links
-    kwargs['packages'] = packages
-    return setup(name = distname,
-                 version = version,
-                 license = license,
-                 description = description,
-                 long_description = long_description,
-                 author = author,
-                 author_email = author_email,
-                 url = web,
-                 scripts = ensure_scripts(scripts),
-                 data_files = data_files,
-                 ext_modules = ext_modules,
-                 cmdclass = {'install_lib': MyInstallLib,
-                             'build_py':    build_py},
-                 **kwargs
-                 )
-
-if __name__ == '__main__' :
-    install()
+setup(
+    name=distname,
+    version=version,
+    license=license,
+    description=description,
+    long_description=long_description,
+    author=author,
+    author_email=author_email,
+    url=web,
+    classifiers=classifiers,
+    packages=find_packages(exclude=['test']),
+    install_requires=install_requires,
+    include_package_data=True,
+    entry_points={'cubicweb.cubes': ['databnf=cubicweb_databnf']},
+    zip_safe=False,
+    dependency_links=dependency_links
+)