11 Commits

Author SHA1 Message Date
1398cfe3db put some sidebars on the site for readability 2020-10-25 17:48:19 -05:00
f63de031f6 tox updates: run py38, combine coverage, dist-as-dir 2020-10-20 16:07:49 -05:00
46bce5a0a5 recompile all requirements, add flake8-mutable 2020-10-20 16:05:17 -05:00
0af0f4e8aa tox.ini updates, use requirements-dev.txt, fix pathing 2020-06-23 13:33:15 -05:00
08896a18c1 reorganize requirements-dev.in, add dlint and flake8-fixme, bandit 2020-06-23 13:30:49 -05:00
ea7c9a1e07 let TODOs through linting, but warn about them 2020-06-22 19:09:39 -05:00
63da59efd5 enable flake8-logging-format violations 2020-06-22 18:50:13 -05:00
c7d4a1c930 add any suppressed flake8-fixme messages in the fail-open run 2020-06-22 18:49:34 -05:00
421d0e6f8e properly create the symlink to dist/ across multiple runs of tox 2020-06-22 18:48:22 -05:00
5c1fc93ff9 combine tox deps in order to unconfuse flake8-isort
with pytest not being included in the lint environment, flake8-isort
didn't know how to treat it vs. incorporealcms imports, leading to false
positives only inside tox. this makes it so that certain packages
(defined in base deps) can be imported in any/all envs, because they
show up in analyzed/imported/etc code rather than being merely tools
2020-06-22 18:48:18 -05:00
7b5f7ff00b add dlint and flake8-fixme 2020-06-20 10:48:46 -05:00
6 changed files with 125 additions and 61 deletions

View File

@@ -1,14 +1,29 @@
html { html {
font-family: sans-serif; font-family: sans-serif;
padding: 0; padding: 0;
padding-bottom: 16px;
color: #222; color: #222;
} }
body { body {
background: #888;
margin: 0; margin: 0;
} }
.site-wrap {
background: white;
max-width: 70pc;
height: 100vh;
margin: 0;
margin-left: auto;
margin-right: auto;
border: 1px solid #ddd;
border-top: none;
border-bottom: none;
}
h1,h2,h3,h4,h5,h6 { h1,h2,h3,h4,h5,h6 {
color: #811610; color: #811610;
} }
@@ -90,6 +105,7 @@ footer {
font-size: 75%; font-size: 75%;
color: #999; color: #999;
padding: 0 1em; padding: 0 1em;
padding-bottom: 16px;
margin-top: 15px; margin-top: 15px;
} }

View File

@@ -2,15 +2,17 @@
<title>{{ title }}{% if title %} - {% endif %}{{ config.TITLE_SUFFIX }}</title> <title>{{ title }}{% if title %} - {% endif %}{{ config.TITLE_SUFFIX }}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link rel="icon" href="{{ url_for('static', filename='img/favicon.png') }}"> <link rel="icon" href="{{ url_for('static', filename='img/favicon.png') }}">
<section class="nav"> <section class="site-wrap">
<section class="nav">
{% for nav in navs %} {% for nav in navs %}
<a href="{{ nav.1 }}">{{ nav.0 }}</a> <a href="{{ nav.1 }}">{{ nav.0 }}</a>
{% if not loop.last %} &raquo; {% endif %} {% if not loop.last %} &raquo; {% endif %}
{% endfor %} {% endfor %}
</section> </section>
<section class="content"> <section class="content">
{{ content }} {{ content }}
</section> </section>
<footer> <footer>
<i>Last modified: {{ mtime }}</i> <i>Last modified: {{ mtime }}</i>
</footer> </footer>
</section>

View File

@@ -1,12 +1,23 @@
-r requirements.in -r requirements.in
flake8 # flake8 and plugins, for local dev linting in vim # testing runner, test reporting, packages used during testing (e.g. requests-mock), etc.
pytest
pytest-cov
# linting and other static code analysis
bandit
dlint
flake8
flake8-blind-except flake8-blind-except
flake8-builtins flake8-builtins
flake8-docstrings flake8-docstrings
flake8-executable flake8-executable
flake8-fixme
flake8-isort flake8-isort
flake8-logging-format flake8-logging-format
flake8-mutable
# maintenance utilities and tox
pip-tools # pip-compile pip-tools # pip-compile
tox # CI stuff tox # CI stuff
tox-wheel # build wheels in tox tox-wheel # build wheels in tox

View File

@@ -5,45 +5,60 @@
# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in # pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in
# #
appdirs==1.4.4 # via virtualenv appdirs==1.4.4 # via virtualenv
attrs==20.2.0 # via pytest
bandit==1.6.2 # via -r requirements/requirements-dev.in
click==7.1.2 # via flask, pip-tools click==7.1.2 # via flask, pip-tools
distlib==0.3.0 # via virtualenv coverage==5.3 # via pytest-cov
distlib==0.3.1 # via virtualenv
dlint==0.10.3 # via -r requirements/requirements-dev.in
filelock==3.0.12 # via tox, virtualenv filelock==3.0.12 # via tox, virtualenv
flake8-blind-except==0.1.1 # via -r requirements/requirements-dev.in flake8-blind-except==0.1.1 # via -r requirements/requirements-dev.in
flake8-builtins==1.5.3 # via -r requirements/requirements-dev.in flake8-builtins==1.5.3 # via -r requirements/requirements-dev.in
flake8-docstrings==1.5.0 # via -r requirements/requirements-dev.in flake8-docstrings==1.5.0 # via -r requirements/requirements-dev.in
flake8-executable==2.0.3 # via -r requirements/requirements-dev.in flake8-executable==2.0.4 # via -r requirements/requirements-dev.in
flake8-isort==3.0.0 # via -r requirements/requirements-dev.in flake8-fixme==1.1.1 # via -r requirements/requirements-dev.in
flake8-isort==4.0.0 # via -r requirements/requirements-dev.in
flake8-logging-format==0.6.0 # via -r requirements/requirements-dev.in flake8-logging-format==0.6.0 # via -r requirements/requirements-dev.in
flake8==3.8.3 # via -r requirements/requirements-dev.in, flake8-builtins, flake8-docstrings, flake8-executable, flake8-isort flake8-mutable==1.2.0 # via -r requirements/requirements-dev.in
flake8==3.8.4 # via -r requirements/requirements-dev.in, dlint, flake8-builtins, flake8-docstrings, flake8-executable, flake8-isort, flake8-mutable
flask==1.1.2 # via -r requirements/requirements.in flask==1.1.2 # via -r requirements/requirements.in
importlib-metadata==1.6.0 # via flake8, markdown, pluggy, tox, virtualenv gitdb==4.0.5 # via gitpython
isort[pyproject]==4.3.21 # via flake8-isort gitpython==3.1.9 # via bandit
importlib-metadata==2.0.0 # via flake8, markdown, pluggy, pytest, stevedore, tox, virtualenv
iniconfig==1.1.1 # via pytest
isort==5.6.4 # via flake8-isort
itsdangerous==1.1.0 # via flask itsdangerous==1.1.0 # via flask
jinja2==2.11.2 # via flask jinja2==2.11.2 # via flask
markdown==3.2.2 # via -r requirements/requirements.in markdown==3.3.2 # via -r requirements/requirements.in
markupsafe==1.1.1 # via jinja2 markupsafe==1.1.1 # via jinja2
mccabe==0.6.1 # via flake8 mccabe==0.6.1 # via flake8
packaging==20.4 # via tox packaging==20.4 # via pytest, tox
pip-tools==5.2.1 # via -r requirements/requirements-dev.in pbr==5.5.1 # via stevedore
pluggy==0.13.1 # via tox pip-tools==5.3.1 # via -r requirements/requirements-dev.in
py==1.8.1 # via tox pluggy==0.13.1 # via pytest, tox
py==1.9.0 # via pytest, tox
pycodestyle==2.6.0 # via flake8 pycodestyle==2.6.0 # via flake8
pydocstyle==5.0.2 # via flake8-docstrings pydocstyle==5.1.1 # via flake8-docstrings
pyflakes==2.2.0 # via flake8 pyflakes==2.2.0 # via flake8
pyparsing==2.4.7 # via packaging pyparsing==2.4.7 # via packaging
pytest-cov==2.10.1 # via -r requirements/requirements-dev.in
pytest==6.1.1 # via -r requirements/requirements-dev.in, pytest-cov
pytz==2020.1 # via tzlocal pytz==2020.1 # via tzlocal
six==1.15.0 # via packaging, pip-tools, tox, virtualenv pyyaml==5.3.1 # via bandit
six==1.15.0 # via bandit, packaging, pip-tools, tox, virtualenv
smmap==3.0.4 # via gitdb
snowballstemmer==2.0.0 # via pydocstyle snowballstemmer==2.0.0 # via pydocstyle
testfixtures==6.14.1 # via flake8-isort stevedore==3.2.2 # via bandit
toml==0.10.1 # via isort, tox testfixtures==6.15.0 # via flake8-isort
tox-wheel==0.4.2 # via -r requirements/requirements-dev.in toml==0.10.1 # via pytest, tox
tox==3.15.2 # via -r requirements/requirements-dev.in, tox-wheel tox-wheel==0.5.0 # via -r requirements/requirements-dev.in
tox==3.20.1 # via -r requirements/requirements-dev.in, tox-wheel
tzlocal==2.1 # via -r requirements/requirements.in tzlocal==2.1 # via -r requirements/requirements.in
versioneer==0.18 # via -r requirements/requirements-dev.in versioneer==0.18 # via -r requirements/requirements-dev.in
virtualenv==20.0.23 # via tox virtualenv==20.0.35 # via tox
werkzeug==1.0.1 # via flask werkzeug==1.0.1 # via flask
wheel==0.34.2 # via tox-wheel wheel==0.35.1 # via tox-wheel
zipp==3.1.0 # via importlib-metadata zipp==3.3.1 # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:
# pip # pip

View File

@@ -6,12 +6,12 @@
# #
click==7.1.2 # via flask click==7.1.2 # via flask
flask==1.1.2 # via -r requirements/requirements.in flask==1.1.2 # via -r requirements/requirements.in
importlib-metadata==1.6.0 # via markdown importlib-metadata==2.0.0 # via markdown
itsdangerous==1.1.0 # via flask itsdangerous==1.1.0 # via flask
jinja2==2.11.2 # via flask jinja2==2.11.2 # via flask
markdown==3.2.2 # via -r requirements/requirements.in markdown==3.3.2 # via -r requirements/requirements.in
markupsafe==1.1.1 # via jinja2 markupsafe==1.1.1 # via jinja2
pytz==2020.1 # via tzlocal pytz==2020.1 # via tzlocal
tzlocal==2.1 # via -r requirements/requirements.in tzlocal==2.1 # via -r requirements/requirements.in
werkzeug==1.0.1 # via flask werkzeug==1.0.1 # via flask
zipp==3.1.0 # via importlib-metadata zipp==3.3.1 # via importlib-metadata

70
tox.ini
View File

@@ -4,7 +4,7 @@
# and then run "tox" from this directory. # and then run "tox" from this directory.
[tox] [tox]
envlist = py37,security,lint envlist = begin,py37,py38,coverage,security,lint,bundle
[testenv] [testenv]
# build a wheel and test it # build a wheel and test it
@@ -12,45 +12,59 @@ wheel = true
wheel_build_env = build wheel_build_env = build
# whitelist commands we need # whitelist commands we need
whitelist_externals = ln whitelist_externals = cp
# install everything via requirements-dev.txt, so that developer environment
# is the same as the tox environment (for ease of use/no weird gotchas in
# local dev results vs. tox results) and also to avoid ticky-tacky maintenance
# of "oh this particular env has weird results unless I install foo" --- just
# shotgun blast install everything everywhere
deps =
-rrequirements/requirements-dev.txt
[testenv:build] [testenv:build]
# require setuptools when building # require setuptools when building
deps = setuptools deps = setuptools
[testenv:begin]
# clean up potential previous coverage runs
skip_install = true
commands = coverage erase
[testenv:py37] [testenv:py37]
# run pytest and coverage # run pytest with coverage
deps =
pytest
pytest-cov
commands = commands =
pytest --cov={envsitepackagesdir}/incorporealcms/ \ pytest --cov-append --cov={envsitepackagesdir}/incorporealcms/ --cov-branch
--cov-report=term-missing --cov-branch --cov-fail-under=90
ln -sf {distdir} dist [testenv:py38]
# run pytest with coverage
commands =
pytest --cov-append --cov={envsitepackagesdir}/incorporealcms/ --cov-branch
[testenv:coverage]
# report on coverage runs from above
skip_install = true
commands =
coverage report --fail-under=95 --show-missing
[testenv:security] [testenv:security]
# run security checks # run security checks
# #
# again it seems the most valuable here to run against the packaged code # again it seems the most valuable here to run against the packaged code
deps =
bandit
commands = commands =
bandit {envsitepackagesdir}/incorporealcms/ -r bandit {envsitepackagesdir}/incorporealcms/ -r
[testenv:lint] [testenv:lint]
# run style checks # run style checks
skip_install = true
deps =
flake8
flake8-blind-except
flake8-builtins
flake8-docstrings
flake8-executable
flake8-isort
flake8-logging-format
commands = commands =
flake8 flake8
- flake8 --disable-noqa --select=E,W,F,C,D,A,G,B,I - flake8 --disable-noqa --ignore= --select=E,W,F,C,D,A,G,B,I,T,M,DUO
[testenv:bundle]
# take extra actions (build sdist, sphinx, whatever) to completely package the app
commands =
cp -r {distdir} .
python setup.py sdist
[coverage:paths] [coverage:paths]
source = source =
@@ -59,23 +73,29 @@ source =
[coverage:run] [coverage:run]
branch = True branch = True
# redundant with pytest --cov above, but this tricks the coverage.xml report into
# using the full path, otherwise files with the same name in different paths
# get clobbered. maybe appends would fix this, IDK
include =
.tox/**/incorporealcms/
omit = omit =
**/_version.py **/_version.py
[flake8] [flake8]
max-line-length = 120 enable-extensions = G,M
exclude = exclude =
.tox/ .tox/
versioneer.py versioneer.py
_version.py _version.py
instance/ instance/
extend-ignore = T101
max-complexity = 10 max-complexity = 10
max-line-length = 120
[isort] [isort]
line_length = 120 line_length = 120
# only way I could figure out how to make tests/conftest.py happy and have pytest separate from incorporealcms
# and if I let them be combined in tox runs, flake8-isort in vim would complain :(
forced_separate = incorporealcms
[pytest] [pytest]
python_files = python_files =