diff --git a/.coveragerc b/.coveragerc index efcb070..f0b76c0 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,3 +1,3 @@ [run] -omit = *_settings.py, defender/*migrations/*, defender/exampleapp/*, *test.py, +omit = *_settings.py, defender/*migrations/*, exampleapp/*, *test.py, *__init__.py, *tests.py, *urls.py diff --git a/.eggs/README.txt b/.eggs/README.txt new file mode 100644 index 0000000..5d01668 --- /dev/null +++ b/.eggs/README.txt @@ -0,0 +1,6 @@ +This directory contains eggs that were downloaded by setuptools to build, test, and run plug-ins. + +This directory caches those eggs to prevent repeated downloads. + +However, it is safe to delete this directory. + diff --git a/.gitignore b/.gitignore index 6a08905..1fd65aa 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ var/ .installed.cfg *.egg MANIFEST +.eggs # PyInstaller # Usually these files are written by a python script from a template @@ -55,5 +56,5 @@ docs/_build/ target/ # exampleapp -defender/exampleapp/static/ -defender/exampleapp/media/ +exampleapp/static/ +exampleapp/media/ diff --git a/MANIFEST.in b/MANIFEST.in index e7998d1..272a2e4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,12 @@ -include CONTRIBUTING.rst +include .coveragerc include CHANGES.rst -include README.rst +include CONTRIBUTING.rst include LICENSE +include README.rst +include requirements.txt +include tox.ini +recursive-include docs * +recursive-include exampleapp * recursive-include defender/templates *.html recursive-exclude * *.py[co] +prune .eggs diff --git a/README.rst b/README.rst index 2f1432c..937693c 100644 --- a/README.rst +++ b/README.rst @@ -14,6 +14,10 @@ django-defender :target: https://codecov.io/gh/jazzband/django-defender :alt: Coverage +.. image:: https://readthedocs.org/projects/python-dockerflow/badge/?version=latest + :alt: Documentation Status + :target: https://django-defender.readthedocs.io/en/latest/?badge=latest + A simple Django reusable app that blocks people from brute forcing login attempts. The goal is to make this as fast as possible, so that we do not diff --git a/defender/exampleapp/__init__.py b/exampleapp/__init__.py similarity index 100% rename from defender/exampleapp/__init__.py rename to exampleapp/__init__.py diff --git a/defender/exampleapp/defender.sb b/exampleapp/defender.sb similarity index 100% rename from defender/exampleapp/defender.sb rename to exampleapp/defender.sb diff --git a/defender/exampleapp/readme.md b/exampleapp/readme.md similarity index 81% rename from defender/exampleapp/readme.md rename to exampleapp/readme.md index ba61ac1..3e1e2f4 100644 --- a/defender/exampleapp/readme.md +++ b/exampleapp/readme.md @@ -8,7 +8,7 @@ This is just a simple example app, used for testing and showing how things work ``` mkdir -p exampleapp/static exampleapp/media/static -PYTHONPATH=$PYTHONPATH:$PWD django-admin.py collectstatic --noinput --settings=defender.exampleapp.settings +PYTHONPATH=$PYTHONPATH:$PWD django-admin.py collectstatic --noinput --settings=exampleapp.settings -PYTHONPATH=$PYTHONPATH:$PWD django-admin.py runserver --settings=defender.exampleapp.settings +PYTHONPATH=$PYTHONPATH:$PWD django-admin.py runserver --settings=exampleapp.settings ``` diff --git a/defender/exampleapp/settings.py b/exampleapp/settings.py similarity index 91% rename from defender/exampleapp/settings.py rename to exampleapp/settings.py index 9e97954..88b2849 100644 --- a/defender/exampleapp/settings.py +++ b/exampleapp/settings.py @@ -30,7 +30,7 @@ MIDDLEWARE = ( "defender.middleware.FailedLoginMiddleware", ) -ROOT_URLCONF = "defender.exampleapp.urls" +ROOT_URLCONF = "exampleapp.urls" INSTALLED_APPS = [ "django.contrib.auth", @@ -61,7 +61,7 @@ DEFENDER_REDIS_URL = "redis://localhost:6379/1" DEFENDER_MOCK_REDIS = False # Let's use custom function and strip username string from request. DEFENDER_GET_USERNAME_FROM_REQUEST_PATH = ( - "defender.exampleapp.utils.strip_username_from_request" + "exampleapp.utils.strip_username_from_request" ) # Celery settings: @@ -70,7 +70,7 @@ BROKER_BACKEND = "memory" BROKER_URL = "memory://" # set the default Django settings module for the 'celery' program. -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "defender.exampleapp.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "exampleapp.settings") app = Celery("defender") diff --git a/defender/exampleapp/urls.py b/exampleapp/urls.py similarity index 100% rename from defender/exampleapp/urls.py rename to exampleapp/urls.py diff --git a/defender/exampleapp/utils.py b/exampleapp/utils.py similarity index 100% rename from defender/exampleapp/utils.py rename to exampleapp/utils.py diff --git a/tox.ini b/tox.ini index 077b4ba..55af8a1 100644 --- a/tox.ini +++ b/tox.ini @@ -6,6 +6,7 @@ envlist = py35-django(21,22) py{36,37,py3}-django{21,22,master} py38-django22 + py38-{lint,docs} [travis] python = @@ -28,3 +29,21 @@ usedevelop = True commands = {envbindir}/coverage run --source=defender {envbindir}/django-admin.py test defender --settings=defender.travis_settings {envbindir}/coverage report -m + +[testenv:py38-docs] +basepython = python3.8 +deps = + -rrequirements.txt + Sphinx + sphinx_rtd_theme +commands = sphinx-build -b html -d {envtmpdir}/doctrees docs {envtmpdir}/html + +[testenv:py38-lint] +basepython = python3.8 +deps = + twine + check-manifest +commands = + check-manifest -v + python setup.py sdist + twine check dist/*