forked from mkasprzyk/meme-maker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.py
More file actions
115 lines (89 loc) · 3.29 KB
/
Copy pathsetup.py
File metadata and controls
115 lines (89 loc) · 3.29 KB
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
#!/usr/bin/env python
from setuptools import setup, find_packages
from setuptools.command.install import install
from setuptools.command.develop import develop
from setuptools.command.sdist import sdist
from setuptools.command.egg_info import egg_info
import unittest
import pip
import os
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
class SetupTypes:
SERVERLESS = 'serverless'
BASE = 'base'
TEST = 'test'
PROD = 'prod'
DEV = 'dev'
all = [SERVERLESS, DEV, TEST, BASE, PROD]
@staticmethod
def requirements(setup_type):
requirements_path_pattern = 'requirements/{setup_type}.txt'
return requirements_path_pattern.format(
setup_type=setup_type
)
class CustomCommand(object):
def prepare_requirements(self, setup_type):
requirements = os.path.join(os.getcwd(),
SetupTypes.requirements(setup_type))
assert os.path.exists(requirements), 'Invalid requirements path!'
return requirements
def prepare_install_requires(self, setup_type=SetupTypes.BASE):
install_requires = []
parsed_requirements = pip.req.parse_requirements(
self.prepare_requirements(setup_type), session='nevermind')
for line in parsed_requirements:
install_requires.append(str(line.req))
return install_requires
def update_extras_requires(self):
self.distribution.extras_require = {}
for setup_type in SetupTypes.all:
self.distribution.extras_require[
setup_type] = self.prepare_install_requires(setup_type)
def command_factory(base_command):
class Command(base_command, CustomCommand):
def run(self):
self.update_extras_requires()
super(Command, self).run()
return Command
class CustomInstall(command_factory(install)):
pass
class CustomDevelop(command_factory(develop)):
pass
class CustomSdist(command_factory(sdist)):
pass
class CustomEggInfo(command_factory(egg_info)):
pass
def tests():
test_loader = unittest.TestLoader()
test_suite = test_loader.discover('meme_maker.tests', pattern='test_*.py')
return test_suite
setup(name="meme-maker",
license="MIT",
version='0.5',
description="CLI, API and Slack bot to generate memes. Make memes not war.", # NOQA
maintainer="Jacek Szubert",
maintainer_email="jacek.szubert@gmail.com",
author="Jacek Szubert",
author_email="jacek.szubert@gmail.com",
url="https://github.com/jacekszubert/meme-maker",
keywords="meme, memes, slack, bot, api, cli, generator",
classifiers=["Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python",
"Topic :: Software Development :: Libraries :: Python Modules", # NOQA
],
packages=find_packages(),
include_package_data=True,
entry_points={
'console_scripts': [
'meme-maker = meme_maker.__main__:cli',
]
},
cmdclass={
'install': CustomInstall,
'develop': CustomDevelop,
'sdist': CustomSdist,
'egg_info': CustomEggInfo
},
test_suite='setup.tests'
)