sync setup.py with panikdb
authorFrédéric Péters <fpeters@0d.be>
Wed, 8 Jul 2020 07:37:17 +0000 (09:37 +0200)
committerFrédéric Péters <fpeters@0d.be>
Wed, 8 Jul 2020 07:37:17 +0000 (09:37 +0200)
setup.py

index b7fc8bf..e46d3c4 100644 (file)
--- a/setup.py
+++ b/setup.py
-#!/usr/bin/env python
-
-from setuptools import setup
-
-setup(name='panikweb',
-      version='0.1',
-      description='Radio Panik Website',
-      author='Frederic Peters',
-      author_email='fpeters@0d.be',
-      url='http://www.radiopanik.org',
-      install_requires=[
-          'django',
-          'sorl-thumbnail',
-           ],
-      license='GPL',
-      classifiers=['Development Status :: 3 - Alpha',
-                   'Environment :: Web Environment',
-                   'Framework :: Django',
-                   'Intended Audience :: Developers',
-                   'License :: OSI Approved :: GNU General Public License (GPL) License',
-                   'Operating System :: OS Independent',
-                   'Programming Language :: Python',
-                   'Topic :: Internet :: WWW/HTTP',
-                   'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
-                   ],
-      )
+#! /usr/bin/env python3
+
+import os
+import subprocess
+import sys
+
+from setuptools.command.install_lib import install_lib as _install_lib
+from distutils.command.build import build as _build
+from distutils.command.sdist import sdist as _sdist
+from distutils.cmd import Command
+from distutils.spawn import find_executable
+from setuptools import setup, find_packages
+
+
+class sdist(_sdist):
+    def run(self):
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+        version = get_version()
+        with open('VERSION', 'w') as fd:
+            fd.write(version)
+        _sdist.run(self)
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+
+
+def get_version():
+    if os.path.exists('VERSION'):
+        with open('VERSION', 'r') as v:
+            return v.read()
+    if os.path.exists('.git'):
+        p = subprocess.Popen(['git', 'describe', '--dirty=.dirty', '--match=v*'],
+                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        result = p.communicate()[0]
+        if p.returncode == 0:
+            result = result.decode('ascii').strip()[1:]  # strip spaces/newlines and initial v
+            if '-' in result:  # not a tagged version
+                real_number, commit_count, commit_hash = result.split('-', 2)
+                version = '%s.post%s+%s' % (real_number, commit_count, commit_hash)
+            else:
+                version = result
+            return version
+        else:
+            return '0.0.post%s' % len(
+                    subprocess.check_output(
+                            ['git', 'rev-list', 'HEAD']).splitlines())
+    return '0.0'
+
+
+class compile_translations(Command):
+    description = 'compile message catalogs to MO files via django compilemessages'
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        try:
+            from django.core.management import call_command
+            for path, dirs, files in os.walk('panikweb'):
+                if 'locale' not in dirs:
+                    continue
+                curdir = os.getcwd()
+                os.chdir(os.path.realpath(path))
+                call_command('compilemessages')
+                os.chdir(curdir)
+        except ImportError:
+            sys.stderr.write('!!! Please install Django >= 1.4 to build translations\n')
+
+
+class compile_scss(Command):
+    description = 'compile scss files into css files'
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        sass_bin = None
+        for program in ('sassc', 'sass'):
+            sass_bin = find_executable(program)
+            if sass_bin:
+                break
+        if not sass_bin:
+            raise CompileError(
+                'A sass compiler is required but none was found.  See sass-lang.com for choices.'
+            )
+
+        for path, dirnames, filenames in os.walk('panikweb'):
+            for filename in filenames:
+                if not filename.endswith('.scss'):
+                    continue
+                if filename.startswith('_'):
+                    continue
+                subprocess.check_call(
+                    [
+                        sass_bin,
+                        '%s/%s' % (path, filename),
+                        '%s/%s' % (path, filename.replace('.scss', '.css')),
+                    ]
+                )
+
+
+class build(_build):
+    sub_commands = [('compile_translations', None), ('compile_scss', None)] + _build.sub_commands
+
+
+class install_lib(_install_lib):
+    def run(self):
+        self.run_command('compile_translations')
+        _install_lib.run(self)
+
+
+setup(
+    name='panikweb',
+    version=get_version(),
+    description='Radio Panik Website',
+    author='Frederic Peters',
+    author_email='fred@radiopanik.org',
+    packages=find_packages(),
+    url='https://www.radiopanik.org',
+    include_package_data=True,
+    scripts=('manage.py',),
+    classifiers=[
+        'Development Status :: 4 - Beta',
+        'Environment :: Web Environment',
+        'Framework :: Django',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
+        'Operating System :: OS Independent',
+        'Programming Language :: Python',
+        'Programming Language :: Python :: 3',
+        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
+        'Topic :: Multimedia :: Sound/Audio',
+    ],
+    zip_safe=False,
+    cmdclass={
+        'build': build,
+        'compile_scss': compile_scss,
+        'compile_translations': compile_translations,
+        'install_lib': install_lib,
+        'sdist': sdist,
+    }
+)