diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 9f70b6f..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,14 +0,0 @@ -include AUTHORS.rst -include CONTRIBUTING.rst -include HISTORY.rst -include LICENSE -include README.rst - -recursive-include tests * -recursive-exclude * __pycache__ -recursive-exclude * *.py[co] -recursive-exclude visualqc/resources -recursive-exclude docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif - -include versioneer.py -include visualqc/_version.py diff --git a/Makefile b/Makefile deleted file mode 100644 index 39d1ce7..0000000 --- a/Makefile +++ /dev/null @@ -1,87 +0,0 @@ -.PHONY: clean clean-test clean-pyc clean-build docs help -.DEFAULT_GOAL := help -define BROWSER_PYSCRIPT -import os, webbrowser, sys -try: - from urllib import pathname2url -except: - from urllib.request import pathname2url - -webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) -endef -export BROWSER_PYSCRIPT - -define PRINT_HELP_PYSCRIPT -import re, sys - -for line in sys.stdin: - match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) - if match: - target, help = match.groups() - print("%-20s %s" % (target, help)) -endef -export PRINT_HELP_PYSCRIPT -BROWSER := python -c "$$BROWSER_PYSCRIPT" - -help: - @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) - -clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts - - -clean-build: ## remove build artifacts - rm -fr build/ - rm -fr dist/ - rm -fr .eggs/ - find . -name '*.egg-info' -exec rm -fr {} + - find . -name '*.egg' -exec rm -f {} + - -clean-pyc: ## remove Python file artifacts - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -fr {} + - -clean-test: ## remove test and coverage artifacts - rm -fr .tox/ - rm -f .coverage - rm -fr htmlcov/ - -lint: ## check style with flake8 - flake8 visualqc tests - -test: ## run tests quickly with the default Python - py.test - - -test-all: ## run tests on every Python version with tox - tox - -coverage: ## check code coverage quickly with the default Python - coverage run --source visualqc -m pytest - coverage report -m - coverage html - $(BROWSER) htmlcov/index.html - -docs: ## generate Sphinx HTML documentation, including API docs - rm -f docs/visualqc.rst - rm -f docs/modules.rst - sphinx-apidoc -o docs/ visualqc - $(MAKE) -C docs clean - $(MAKE) -C docs html - $(BROWSER) docs/_build/html/index.html - -servedocs: docs ## compile the docs watching for changes - watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D . - -release: clean ## package and upload a release - python setup.py sdist upload - python setup.py bdist_wheel upload - -dist: clean ## builds source and wheel package - python setup.py sdist - python setup.py bdist_wheel - ls -l dist - -install: clean ## install the package to the active Python's site-packages - python setup.py install diff --git a/github_deploy_key_raamana_visualqc.enc b/github_deploy_key_raamana_visualqc.enc deleted file mode 100644 index 14e139c..0000000 --- a/github_deploy_key_raamana_visualqc.enc +++ /dev/null @@ -1 +0,0 @@ -gAAAAABax7earL0zM0QIy56CIAQDJAoMjFMg5tA174PX0dSymAuZWOp0NcjpbHDo5h-AbVQy9ZSF03m1MkfPQndDL7ny_7nIYgwvsaQn9V68t7ZbptkF2HkT3jA8o4cL-MP21qCCReKTxkzl3cDXoB8-TlR9P1kyqO7jGl0rKsQLa5N64Evt_7ZVtcWKrOVuOrNzCFtoELx7d8hDrW0Zl3kEv65hJ4WTzsF__MS2abF8sr4hVDMYSY_PStkT0VsEcRCNiSlG6dN0owZukEVqZTqzvpeJNQDFtibG_4APXNJ5H0MXEkPR8bTB2D5sUm2jTckBeqiuDIbNvHUi_OU6DAgGtvRRt5Zawk7Vyi_QQKnl6HeEOTGEPN3DJNsyEuudWpjvccTicLeOCTC2METWthJXUJO0ayIhuJ3f3AOnrfqN457-B71G0uayziFP6xtbI13e0Haev8QszWenmymFSaAxUobSa3xDluY5UoDdjRCZGFVSfUAZgRuQAVFaOoI5cWdMNv_v0u0ZA5t9qzhe-mukye__3D6TxeixGCoGkHgeZETMfbrjuc3Aa2pdzCkodkYjaIrR14Wzazoj6-KBoGU-HN5BHBzqNf0iYHoR11Jx_1q-nPRO845-plNl2I4gN9A7uN35UV93rVNN5HUmbE7GNdWkj3BxEZCu5msePhpLLlm6N9k7yJmKjxzwxtytJG6KG2rattu0ZUVDUdgDihArgPRwLGauuhXfiFo5rhCnrP0xiCFjn77vbXMdea6T2A7nT1VgTjG0L7pNQRfYa8ws0lMpvQEbHT_OArESKSTZzd1w-oZSBfd5R5JP8dmdikqluxxrH4ZghXi6jQHi3fcXk53A2F2tXFN9BpqwFSBGrFLqOLQsgXTjmajqOTgb7-hKMh7uu0rjj23U6Xnu8VKoZuuG1O6XJ4l0F7u8EdLh9uMJ5kBkFINlWzCMMpaAD0oOV1IDs5PJ9jNZ0swYRMBGXLLR_gTGiT2SpYLwepAVfqTq953N5bGa7YkQka0cKtplVC8XIU6EFDIM95YuHStQPW7rIC9Oh3IvVPSrVWQlkz2nsqEUEKUWm9AaNs_1g4siW1r77ARFbSr8S0QIVfnd3nAP2nvZ0Ag1QfnIs5KEGPqmMjNKOSdO57akUUBq6MAuEoOLsAVyI-Y2QL2oHlJz4UrXNJ-hkrRYf-TuPtlcvChadXp_AbE1hBfqU3xo5LBFJkdK21bE-nNzSO5A-VdAGZg8L2BT2C6bZXtqcSey6fAk_gaJeIRlP2vXSTVf8I4yRDkvgQsMgB0vDs4Xtp3336YTnyCPw6IKsIIcebuL1OwBnjxulnZA6S8rFOtwCi69gxwvYhUArRu586UzuROzBPzCVUMP4Llt8Sz5eNVIL6e46UtV7kxQ5ugkvYPWmrynMq9iquUqosM67OXBD42FAZOzP1kAYfeJd9CqO6rJpqtL8F5Hda99hWAwAssQQQGWxlnAjMBGL6Mz379UyJKD7VrvLtte0Cq9CiWsNxqs0Blf0Q8nrOxbaoAGx7xi7wp8S_Vb8em6q__wxTdBno3q1wLm2K8t4maShzQG0kiW5j_mt8wtF-fhtCRJDVMefYEQWTND_VageYCoyGXoyX7qeGhzfeGkQMuObQ2GhdSKc7I27UqatkjFS-Qve1Rkunw-STh_4HY5pc02s80AuoQONagzT8H-6njHCzOMrOubHlfVtqPZGyzrwnqmu4B7tpJkSLvXx3It6tFh54OFBHHKcTK1A0uHcRvX1MS94ujKpCTTzzowwFbk2YP_HgsXfbKDVucZ-Nv2NdYb5JiDvDVva5sfYzV46vLeV7bwFqN38XAykJYAVpxUGnOMnDF1_NvJAD0EO5jOLc7qw460oku346baNg6eqLQuFARMoSev14NAvY8kgXIOIxrrbyzIVQC3DBV1EXvLWOUAgJ_bR9LBKbVrKT8sWN-6d0GC6rFKMTEx1b2lN57p7mhg0SHZQKPcX2wpW9cYTGeXFlV6B3sfqYbntKNgraCjFzNbf24Yb_8Le_uL3FfiGMHQP0gbX0yRVPXG3qry-J54SoytqHtH6dKPxvcCOSmyc5EqatTEa6dc1pGIZWUb0yaq9N6nOK5YZ9LsHw4tmzBMSI_ihyKuWGAQ4LqoZA8quvcwG8uACR8EpfGWnRGhcrHl7YhRQbwT7ziOdKfp9XObOvgB1aw1mYO_z33Z5ayOIqyR2ba4_mrhnY0NKEEtyuQ77MPuC5PsSpp0yowgScvN2iYn-CD8qSRbHWh0XP-Fdh-LG-1Ofck8O9Z645bfjAILL6WVC3da9LHeXLW_8bYADZcTHI4IZ4uYimwKrM-HdQx2DVgEU4vVWsNkI4Ee_3CEUI7rncjoTpgvTNGZGUCDfXxLBI1vHUCsHryYS16YbnNObM1il5u6Yyc0Z9SMK5DE_J86n14FFy55O6KrbGx7W6HCLxgqhuriRY8KH53HgJty_VdHAyNgPkW0zG38ti1q2CPcSNPyLRB5-BoOpiltbwuYYUjwO_4itUmplJjMr16eZ7e9laylqGFQTTH9i2qcwDzy7ZpnwIGTyQ2hjlHQ2cphJXGDxRumZVo2eZMIZeSeGb5tnzQoby4jXWsD9q149X85WUY-e_pP6OIOhNVg_VEvQpnLMN7KxxDPjA6ESLNNZqAd_W-XfUCncVgESkxSsT9yPbB-tGC3z9dz0i129urJna4mWrbTW2hBqEYo78kwXoBLvOndk4UOXu1nHw-LcrsZgjUNqTQkJwmtrNmRT2jbmhpZxKLTi2jfMVu_8IjG634NqQvgl8o4hNrelby_eh-84L4O0NbxXMFP5YsoE5mQDh6Xjs2K101gtVduAMrz7y83v0yK51Nfp1jYRx8zhu8nK7NqIzAQeMdvVctMTEofcYeoqD4e9BCBESYzsDI6DMMMSQXVf265CLcAqG26qUYFsa0uB0BxgW5njD8XsTID-sZrdsHBLImF8nIwqwXLAnBVQfOnstGvHvulgnJFYXqbQiIqive9ZFHwNgT2zW14j1cGBwI34rwXSgC3iq-Lmon8szYXohzWEioOUizls9RkLvrSI_P7aoSRunmk5pzYAh6sYxZ7rHfs5Xqylnxqk_iPhSreN7iv-vCWN219vMzteuh-XkodENESMXGLfVbSTSaaGuiEStSiUS2CefVQ6luXPqNmpkWPNBmOA-FQTKHOiy2KH6QNwZdfAn6DiSvSAKZUNOtqvqgCmDIB_gFdsub_dn5MQXCwPqRzqvM1uRpPG5jAnamM07Kv3-t1TKwsEsafQRc9yNvginQGhf3f8u_ibVfOz9QES_YDjxvsTkbAi0ZNFJ3QMKW7YLTHqAsEydlRybUi7q1_fo4_t8WfxVsEswpyJNtBQbkuOvcasw_Dwp53EpjsY28HUNtk4-FV5zhkoOwpISm7Y28MVTRSp93QjQgoCVflylmu21CH8FcpW6J10y5XDuer8tjM6xjHkDdwtlZ4UYrCzrZ9aATbkkrC_psLrlIq7_qSjEDTKllsaRPN4tvYVtxAcvuLdwK41bPyd3iNDnpHFn__YMQ9eLuizs9I1_JuWKnXcdzfpInHBvQNYhMjYKl0B7Fw8FO2eOjmKSXZjeBL5woQjRl1zboIW5m-wT9bPivQpqZB_stA2mb9Fyi9U-iZlWnFWoSKbK9ck0Mk2jgnqQvRA5bh0uZvTzaLDrueK9tZajZh4Qs6guNBu2vBeQ_GPMOr4txpGEvzlkf_EWOszT03ApO8SdEZX9El5ZvisUnGb2MQuSXVmzcGRAVdHHo9oZ_dDroDNZXGBgSRHZ4x31Wno696BrgFaNYi-u1ccbAHEkBQ3zwX925wYbGFVo5EjfNWz-0dE8swN0XtBp1RComIwoF6WzwdqPPKhX_vmbr-P7KPfa8r8elt4rTvUEWU6xp6TKLLjKHdZ1K2HZGzdtF1FWKSIAlEF4nTPLpNydt_QmuCiXyDJGtAgMxGfYXgVg5XkQ46J8xx5Hfo1uM_LO7q5PdEmi-qlnpRnn8mXUiUjeBLueElPBkhgCtG39FD8-f7uUwe-tp4oHSHxHj3WyqUTUL2nMn03fJ9roWe4HhjeFKHhHHRZ1Ip4eD2QGN7UzuwMiD3viaXdke10rg_dkwhPYMbN-bs5FSMw9cPJG73y5xbg1X-1WmBju_WvQtZVD8p5ESkoycLTdBfpEZRPanr3ZiycRi56RbFbZyf_d8tGy56AO7ST85DVG5hlY1axbkrIQQ6dEj-etSOmNS3uNEOq4Z-jpyFcWrf8TBOGTJzEzI9pWthYnz3eOt0Y9qdQOgHkj8a8O5m3WLRQHrwDotDW4XcqMorNPyh6FLtU73OBbRkFjljARolODTu5dB_3NTGCST3f_4Y0F3ubM6ILJkp2sSEIu_l-cdMpdedUh4= \ No newline at end of file diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 5dc6eaf..0000000 --- a/tox.ini +++ /dev/null @@ -1,30 +0,0 @@ -[tox] -envlist = py33, py34, py35, flake8 - -[travis] -python = - 3.5: py35 - 3.4: py34 - 3.3: py33 - 2.7: py27 - 2.6: py26 - -[testenv:flake8] -basepython=python -deps=flake8 -commands=flake8 visualqc - -[testenv] -setenv = - PYTHONPATH = {toxinidir} -deps = - -r{toxinidir}/requirements_dev.txt -commands = - pip install -U pip - py.test --basetemp={envtmpdir} - - -; If you want to make tox run the tests with the same versions, create a -; requirements.txt with the pinned versions and uncomment the following lines: -; deps = -; -r{toxinidir}/requirements.txt diff --git a/travis_pypi_setup.py b/travis_pypi_setup.py deleted file mode 100644 index 07b75ea..0000000 --- a/travis_pypi_setup.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Update encrypted deploy password in Travis config file.""" - - -from __future__ import print_function -import base64 -import json -import os -from getpass import getpass -import yaml -from cryptography.hazmat.primitives.serialization import load_pem_public_key -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 - - -try: - from urllib import urlopen -except ImportError: - from urllib.request import urlopen - - -GITHUB_REPO = 'raamana/visualqc' -TRAVIS_CONFIG_FILE = os.path.join( - os.path.dirname(os.path.abspath(__file__)), '.travis.yml') - - -def load_key(pubkey): - """Load public RSA key. - - Work around keys with incorrect header/footer format. - - Read more about RSA encryption with cryptography: - https://cryptography.io/latest/hazmat/primitives/asymmetric/rsa/ - """ - try: - return load_pem_public_key(pubkey.encode(), default_backend()) - except ValueError: - # workaround for https://github.com/travis-ci/travis-api/issues/196 - pubkey = pubkey.replace('BEGIN RSA', 'BEGIN').replace('END RSA', 'END') - return load_pem_public_key(pubkey.encode(), default_backend()) - - -def encrypt(pubkey, password): - """Encrypt password using given RSA public key and encode it with base64. - - The encrypted password can only be decrypted by someone with the - private key (in this case, only Travis). - """ - key = load_key(pubkey) - encrypted_password = key.encrypt(password, PKCS1v15()) - return base64.b64encode(encrypted_password) - - -def fetch_public_key(repo): - """Download RSA public key Travis will use for this repo. - - Travis API docs: http://docs.travis-ci.com/api/#repository-keys - """ - keyurl = 'https://api.travis-ci.org/repos/{0}/key'.format(repo) - data = json.loads(urlopen(keyurl).read().decode()) - if 'key' not in data: - errmsg = "Could not find public key for repo: {}.\n".format(repo) - errmsg += "Have you already added your GitHub repo to Travis?" - raise ValueError(errmsg) - return data['key'] - - -def prepend_line(filepath, line): - """Rewrite a file adding a line to its beginning.""" - with open(filepath) as f: - lines = f.readlines() - - lines.insert(0, line) - - with open(filepath, 'w') as f: - f.writelines(lines) - - -def load_yaml_config(filepath): - """Load yaml config file at the given path.""" - with open(filepath) as f: - return yaml.load(f) - - -def save_yaml_config(filepath, config): - """Save yaml config file at the given path.""" - with open(filepath, 'w') as f: - yaml.dump(config, f, default_flow_style=False) - - -def update_travis_deploy_password(encrypted_password): - """Put `encrypted_password` into the deploy section of .travis.yml.""" - config = load_yaml_config(TRAVIS_CONFIG_FILE) - - config['deploy']['password'] = dict(secure=encrypted_password) - - save_yaml_config(TRAVIS_CONFIG_FILE, config) - - line = ('# This file was autogenerated and will overwrite' - ' each time you run travis_pypi_setup.py\n') - prepend_line(TRAVIS_CONFIG_FILE, line) - - -def main(args): - """Add a PyPI password to .travis.yml so that Travis can deploy to PyPI. - - Fetch the Travis public key for the repo, and encrypt the PyPI password - with it before adding, so that only Travis can decrypt and use the PyPI - password. - """ - public_key = fetch_public_key(args.repo) - password = args.password or getpass('PyPI password: ') - update_travis_deploy_password(encrypt(public_key, password.encode())) - print("Wrote encrypted password to .travis.yml -- you're ready to deploy") - - -if '__main__' == __name__: - import argparse - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('--repo', default=GITHUB_REPO, - help='GitHub repo (default: %s)' % GITHUB_REPO) - parser.add_argument('--password', - help='PyPI password (will prompt if not provided)') - - args = parser.parse_args() - main(args)