]> git.0d.be Git - earwig.git/commitdiff
add distutils/setuptools packaging
authorFrédéric Péters <fpeters@0d.be>
Sun, 2 Sep 2018 12:21:23 +0000 (14:21 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sun, 2 Sep 2018 13:36:11 +0000 (15:36 +0200)
MANIFEST.in [new file with mode: 0644]
README.md [new file with mode: 0644]
setup.py [new file with mode: 0644]

diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644 (file)
index 0000000..c7942e7
--- /dev/null
@@ -0,0 +1,13 @@
+# locales
+recursive-include earwig/locale *.po *.mo
+
+# static
+recursive-include earwig/ *.scss *.js
+
+# templates
+recursive-include earwig/ *.html
+
+include COPYING
+include README.md
+include MANIFEST.in
+include VERSION
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..08b89cf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,25 @@
+# Earwig
+
+Sound Aggregator.
+
+
+## Installation
+
+(one of many possibilities)
+
+    git clone https://git.0d.be/g/earwig.git
+    virtualenv -p python3 venv3 --system-site-packages
+    . venv3/bin/activate
+    cd earwig
+    python setup.py develop
+    python setup.py compile_scss
+    ./manage.py migrate
+    ./manage.py compilemessages
+    ./manage.py createsuperuser
+    ./manage.py runserver
+
+
+## License
+
+Earwig is licensed under the [GNU Affero General Public License v3.0](http://www.gnu.org/)
+or later.
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..d96633b
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,169 @@
+#! /usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+import glob
+import os
+import re
+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
+from distutils.cmd import Command
+from distutils.spawn import find_executable
+from setuptools import setup, find_packages
+
+class custom_sdist(sdist):
+    def run(self):
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+        version = get_version()
+        version_file = open('VERSION', 'w')
+        version_file.write(version)
+        version_file.close()
+        sdist.run(self)
+        if os.path.exists('VERSION'):
+            os.remove('VERSION')
+
+def get_version():
+    '''Use the VERSION, if absent generates a version with git describe, if not
+       tag exists, take 0.0- and add the length of the commit log.
+    '''
+    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'
+
+def data_tree(destdir, sourcedir):
+    extensions = ['.css', '.png', '.jpeg', '.jpg', '.gif', '.xml', '.html', '.js']
+    r = []
+    for root, dirs, files in os.walk(sourcedir):
+        l = [os.path.join(root, x) for x in files if os.path.splitext(x)[1] in extensions]
+        r.append((root.replace(sourcedir, destdir, 1), l))
+    return r
+
+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('chrono'):
+                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 ('sass', 'sassc'):
+            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.')
+
+        done = {}
+        for package in self.distribution.packages:
+            for package_path in __import__(package).__path__:
+                for path, dirnames, filenames in os.walk(package_path):
+                    for filename in filenames:
+                        if not filename.endswith('.scss'):
+                            continue
+                        if filename.startswith('_'):
+                            continue
+                        if (path, filename) in done:
+                            continue
+                        subprocess.check_call([sass_bin, '%s/%s' % (path, filename),
+                            '%s/%s' % (path, filename.replace('.scss', '.css'))])
+                        done[(path, filename)] = True
+
+
+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='earwig',
+    version=get_version(),
+    description='Sound Aggregator',
+    author='Frederic Peters',
+    author_email='fpeters@e0d.be',
+    packages=find_packages(),
+    include_package_data=True,
+    scripts=('manage.py',),
+    classifiers=[
+        'Development Status :: 3 - Alpha',
+        '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',
+    ],
+    install_requires=['django>=1.11, <1.12',
+        'django-ckeditor<4.5.3',
+        'gadjo>=0.53',
+        'XStatic_OpenSans',
+        'feedparser',
+        'django-registration-redux',
+        'feedparser',
+        'sorl-thumbnail',
+        'Pillow',
+        ],
+    zip_safe=False,
+    cmdclass={
+        'build': build,
+        'compile_scss': compile_scss,
+        'compile_translations': compile_translations,
+        'install_lib': install_lib,
+        'sdist': custom_sdist,
+    },
+)