summaryrefslogtreecommitdiffstats
path: root/setup.py
blob: 8b6868094e4fb233d8132c194ab304be94d712a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python

'''
Setup script for eopayment
'''

import io
import subprocess
import distutils
import distutils.core
import setuptools
from distutils.command.sdist import sdist
from glob import glob
from os.path import splitext, basename, join as pjoin, dirname
import os
from unittest import TextTestRunner, TestLoader
import doctest


class TestCommand(distutils.core.Command):
    user_options = []

    def initialize_options(self):
        self._dir = os.getcwd()

    def finalize_options(self):
        pass

    def run(self):
        '''
        Finds all the tests modules in tests/, and runs them.
        '''
        testfiles = []
        for t in glob(pjoin(self._dir, 'tests', '*.py')):
            if not t.endswith('__init__.py'):
                testfiles.append('.'.join(
                    ['tests', splitext(basename(t))[0]])
                )

        tests = TestLoader().loadTestsFromNames(testfiles)
        import eopayment
        tests.addTests(doctest.DocTestSuite(eopayment))
        t = TextTestRunner(verbosity=4)
        t.run(tests)


class eo_sdist(sdist):

    def run(self):
        print("creating VERSION file")
        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)
        print("removing VERSION file")
        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.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',
                              '--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.0'

setuptools.setup(
    name='eopayment',
    version=get_version(),
    license='GPLv3 or later',
    description='Common API to use all French online payment credit card '
    'processing services',
    long_description=io.open(
        os.path.join(
            os.path.dirname(__file__),
            'README.txt'), encoding='utf-8').read(),
    url='http://dev.entrouvert.org/projects/eopayment/',
    author="Entr'ouvert",
    author_email="info@entrouvert.com",
    maintainer="Benjamin Dauvergne",
    maintainer_email="bdauvergne@entrouvert.com",
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
        'Operating System :: POSIX',
        'Programming Language :: Python',
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 3',
    ],
    packages=['eopayment'],
    install_requires=[
        'pycrypto >= 2.5',
        'pytz',
        'requests',
        'six',
    ],
    cmdclass={
        'sdist': eo_sdist,
    }
)