From 332ad895c0d565d1795fc1b92e756b9387440982 Mon Sep 17 00:00:00 2001 From: EvgeneOskin Date: Tue, 26 Jan 2016 15:23:52 +0600 Subject: [PATCH] Use paver instead of plain setup.py. Add pavement independent paver-minilib, some dev operations to operations. Assign authorship to Crystalnix. --- .gitignore | 1 + MANIFEST.in | 6 ++- pavement.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++ paver-minilib.zip | Bin 0 -> 43589 bytes setup.py | 90 +++++------------------------------------ tox.ini | 5 ++- 6 files changed, 118 insertions(+), 83 deletions(-) create mode 100644 pavement.py create mode 100644 paver-minilib.zip diff --git a/.gitignore b/.gitignore index 1155192..523c8ff 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ dist *.egg-info /build .ropeproject +.eggs diff --git a/MANIFEST.in b/MANIFEST.in index 738616d..908dfa6 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,5 @@ -include README.rst LICENSE requirements.txt \ No newline at end of file +include README.rst +include LICENSE +include setup.py +include pavement.py +include paver-minilib.zip diff --git a/pavement.py b/pavement.py new file mode 100644 index 0000000..f1d4996 --- /dev/null +++ b/pavement.py @@ -0,0 +1,99 @@ +from paver.easy import * # noqa +from paver.setuputils import setup +from setuptools import find_packages + +import sys + +sys.path.append('.') + + +def get_version(): + from serverauditor_sshconfig import __version__ + return '.'.join(map(str, __version__)) + + +requires = [ + 'cliff==1.15', + 'stevedore==1.10.0', + 'requests==2.7.0', + 'pycrypto==2.6', + 'six==1.10.0', + 'pyopenssl', + 'ndg-httpsclient', + 'pyasn1', +] + +handlers = [ + 'sync = serverauditor_sshconfig.sync.commands:SyncCommand', + 'snippet = serverauditor_sshconfig.cloud.commands:SnippetCommand', + 'snippets = serverauditor_sshconfig.cloud.commands:SnippetsCommand', + 'host = serverauditor_sshconfig.cloud.commands:HostCommand', + 'hosts = serverauditor_sshconfig.cloud.commands:HostsCommand', + 'identity = serverauditor_sshconfig.cloud.commands:SshIdentityCommand', + 'identities = serverauditor_sshconfig.cloud.commands:SshIdentitiesCommand', + 'group = serverauditor_sshconfig.cloud.commands:GroupCommand', + 'groups = serverauditor_sshconfig.cloud.commands:GroupsCommand', + 'pfrule = serverauditor_sshconfig.cloud.commands:PFRuleCommand', + 'pfrules = serverauditor_sshconfig.cloud.commands:PFRulesCommand', + 'tags = serverauditor_sshconfig.cloud.commands:TagsCommand', + 'login = serverauditor_sshconfig.account.commands:LoginCommand', + 'logout = serverauditor_sshconfig.account.commands:LogoutCommand', + 'push = serverauditor_sshconfig.cloud.commands:PushCommand', + 'pull = serverauditor_sshconfig.cloud.commands:PullCommand', + 'info = serverauditor_sshconfig.cloud.commands:InfoCommand', + 'connect = serverauditor_sshconfig.handlers:ConnectCommand', +] + +setup( + name='serverauditor-sshconfig', + version=get_version(), + license='BSD', + author='Crystalnix', + author_email='contacts@crystalnix.com', + url='https://github.com/Crystalnix/serverauditor-sshconfig', + description='Serverauditor ssh-config utility.', + keywords=['serverauditor', 'crystalnix'], + packages=find_packages(), + install_requires=requires, + test_suite='nose.collector', + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: Console', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: BSD License', + 'Operating System :: Unix', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.3', + 'Topic :: Utilities', + ], + entry_points={ + 'console_scripts': [ + 'serverauditor = serverauditor_sshconfig.main:main' + ], + 'serverauditor.handlers': handlers, + 'serverauditor.sync.services': [ + # WARNING! It should be removed in production! + # Other projects should add such endpoint to add services. + 'aws = serverauditor_sshconfig.sync.services.aws:AWSService', + ], + }, +) + + +@task +@needs('generate_setup', 'minilib', 'setuptools.command.sdist') +def sdist(): + """Overrides sdist to make sure that our setup.py is generated.""" + pass + + +@task +def lint(): + sh('prospector') + + +@task +def bats(): + sh('bats tests/integration') diff --git a/paver-minilib.zip b/paver-minilib.zip new file mode 100644 index 0000000000000000000000000000000000000000..0064dab30a0437cc0462c213c1e246f0e86fdc0d GIT binary patch literal 43589 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 26526c4..b2c63e2 100644 --- a/setup.py +++ b/setup.py @@ -1,80 +1,10 @@ -from setuptools import setup, find_packages - -from serverauditor_sshconfig import __version__ - - -def get_version(): - return '.'.join(map(str, __version__)) - - -def get_long_description(): - with open('README.rst') as f: - return f.read() - -requires = [ - 'cliff==1.13', - 'stevedore==1.6.0', - 'requests==2.7.0', - 'pycrypto==2.6', - 'six==1.9.0', - 'pyopenssl', - 'ndg-httpsclient', - 'pyasn1', -] - - -setup( - name='serverauditor-sshconfig', - version=get_version(), - license='BSD', - author='Yan Kalchevskiy', - author_email='yan.kalchevskiy@crystalnix.com', - url='https://github.com/Crystalnix/serverauditor-sshconfig', - description='Serverauditor ssh-config utility.', - long_description=get_long_description(), - keywords=['serverauditor', 'crystalnix'], - packages=find_packages(), - install_requires=requires, - zip_safe=False, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: BSD License', - 'Operating System :: Unix', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', - 'Topic :: Utilities', - ], - entry_points={ - 'console_scripts': [ - 'serverauditor = serverauditor_sshconfig.main:main' - ], - 'serverauditor.handlers': [ - 'sync = serverauditor_sshconfig.sync.commands:SyncCommand', - 'snippet = serverauditor_sshconfig.cloud.commands:SnippetCommand', - 'snippets = serverauditor_sshconfig.cloud.commands:SnippetsCommand', - 'host = serverauditor_sshconfig.cloud.commands:HostCommand', - 'hosts = serverauditor_sshconfig.cloud.commands:HostsCommand', - 'identity = serverauditor_sshconfig.cloud.commands:SshIdentityCommand', - 'identities = serverauditor_sshconfig.cloud.commands:SshIdentitiesCommand', - 'group = serverauditor_sshconfig.cloud.commands:GroupCommand', - 'groups = serverauditor_sshconfig.cloud.commands:GroupsCommand', - 'pfrule = serverauditor_sshconfig.cloud.commands:PFRuleCommand', - 'pfrules = serverauditor_sshconfig.cloud.commands:PFRulesCommand', - 'tags = serverauditor_sshconfig.cloud.commands:TagsCommand', - 'login = serverauditor_sshconfig.account.commands:LoginCommand', - 'logout = serverauditor_sshconfig.account.commands:LogoutCommand', - 'push = serverauditor_sshconfig.cloud.commands:PushCommand', - 'pull = serverauditor_sshconfig.cloud.commands:PullCommand', - 'info = serverauditor_sshconfig.cloud.commands:InfoCommand', - 'connect = serverauditor_sshconfig.handlers:ConnectCommand', - ], - 'serverauditor.sync.services': [ - # WARNING! It should be removed in production! - # Other projects should add such endpoint to add services. - 'aws = serverauditor_sshconfig.sync.services.aws:AWSService', - ], - }, -) +try: + import paver.tasks +except ImportError: + from os.path import exists + if exists("paver-minilib.zip"): + import sys + sys.path.insert(0, "paver-minilib.zip") + import paver.tasks + +paver.tasks.main() diff --git a/tox.ini b/tox.ini index 6b31c9f..1f6debc 100644 --- a/tox.ini +++ b/tox.ini @@ -15,8 +15,9 @@ deps = prospector commands = pip install -U . - nosetests -c .noserc - prospector + paver nosetests + paver lint + paver bats [flake8] exclude = .git*