Compare commits

..

7 Commits

Author SHA1 Message Date
1cf0364268
move templates aroudn to satisfy packaging now that it's being tested 2023-02-16 16:14:06 -06:00
337e4db650
update urls.pyes to use path() and add some tests 2023-02-16 00:04:25 -06:00
95396802de
add safety dependency checking 2023-02-15 20:09:26 -06:00
4bcf06d5e7
version bumps, with some hopefully temporary pins
* django pinned to <4 since there are compatibility things to fix first
* tox pinned to <4 because of issues where it's incompatbile with safety

(safety itself coming in a moment)
2023-02-15 19:51:46 -06:00
54bf00b167
remove references from deleted twitter module 2023-02-15 19:49:27 -06:00
133c1df638
add python 3.9, 3.10 to support via tox 2023-02-15 18:17:32 -06:00
7c44becaa0
drop unsupported python 3.6, 3.7 2023-02-15 18:00:21 -06:00
24 changed files with 350 additions and 222 deletions

View File

@ -1,2 +1,8 @@
include versioneer.py
include dr_botzo/_version.py
graft dr_botzo/templates
graft facts/templates
graft ircbot/templates
graft karma/templates
graft markbot/templates
graft races/templates

View File

@ -1,5 +1,6 @@
"""URL patterns for the countdown views."""
from django.conf.urls import include, url
from django.conf.urls import include
from django.urls import path
from rest_framework.routers import DefaultRouter
from countdown.views import CountdownItemViewSet
@ -8,5 +9,5 @@ router = DefaultRouter()
router.register(r'items', CountdownItemViewSet)
urlpatterns = [
url(r'^api/', include(router.urls)),
path('api/', include(router.urls)),
]

View File

@ -1,20 +1,16 @@
"""URL patterns for the dispatcher API."""
from django.urls import path
from django.conf.urls import url
from dispatch.views import (DispatchMessage, DispatchMessageByKey, DispatcherList, DispatcherDetail,
DispatcherDetailByKey, DispatcherActionList, DispatcherActionDetail)
from dispatch.views import (DispatcherActionDetail, DispatcherActionList, DispatcherDetail, DispatcherDetailByKey,
DispatcherList, DispatchMessage, DispatchMessageByKey)
urlpatterns = [
url(r'^api/dispatchers/$', DispatcherList.as_view(), name='dispatch_api_dispatchers'),
url(r'^api/dispatchers/(?P<pk>[0-9]+)/$', DispatcherDetail.as_view(), name='dispatch_api_dispatcher_detail'),
url(r'^api/dispatchers/(?P<pk>[0-9]+)/message$', DispatchMessage.as_view(), name='dispatch_api_dispatch_message'),
url(r'^api/dispatchers/(?P<key>[A-Za-z-]+)/$', DispatcherDetailByKey.as_view(),
name='dispatch_api_dispatcher_detail'),
url(r'^api/dispatchers/(?P<key>[A-Za-z-]+)/message$', DispatchMessageByKey.as_view(),
name='dispatch_api_dispatch_message'),
path('api/dispatchers/', DispatcherList.as_view(), name='dispatch_api_dispatchers'),
path('api/dispatchers/<pk>/', DispatcherDetail.as_view(), name='dispatch_api_dispatcher_detail'),
path('api/dispatchers/<pk>/message', DispatchMessage.as_view(), name='dispatch_api_dispatch_message'),
path('api/dispatchers/<key>/', DispatcherDetailByKey.as_view(), name='dispatch_api_dispatcher_detail'),
path('api/dispatchers/<key>/message', DispatchMessageByKey.as_view(), name='dispatch_api_dispatch_message'),
url(r'^api/actions/$', DispatcherActionList.as_view(), name='dispatch_api_actions'),
url(r'^api/actions/(?P<pk>[0-9]+)/$', DispatcherActionDetail.as_view(), name='dispatch_api_action_detail'),
path('api/actions/', DispatcherActionList.as_view(), name='dispatch_api_actions'),
path('api/actions/<pk>/', DispatcherActionDetail.as_view(), name='dispatch_api_action_detail'),
]

View File

@ -68,7 +68,7 @@ ROOT_URLCONF = 'dr_botzo.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'DIRS': [os.path.join(BASE_DIR, 'dr_botzo', 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [

View File

@ -1,7 +1,8 @@
"""General/baselite/site-wide URLs."""
from adminplus.sites import AdminSitePlus
from django.conf.urls import include, url
from django.conf.urls import include
from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView
admin.site = AdminSitePlus()
@ -9,17 +10,17 @@ admin.sites.site = admin.site
admin.autodiscover()
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
path('', TemplateView.as_view(template_name='index.html'), name='index'),
url(r'^countdown/', include('countdown.urls')),
url(r'^dice/', include('dice.urls')),
url(r'^dispatch/', include('dispatch.urls')),
url(r'^itemsets/', include('facts.urls')),
url(r'^karma/', include('karma.urls')),
url(r'^markov/', include('markov.urls')),
url(r'^pi/', include('pi.urls')),
url(r'^races/', include('races.urls')),
url(r'^weather/', include('weather.urls')),
path('countdown/', include('countdown.urls')),
path('dice/', include('dice.urls')),
path('dispatch/', include('dispatch.urls')),
path('itemsets/', include('facts.urls')),
path('karma/', include('karma.urls')),
path('markov/', include('markov.urls')),
path('pi/', include('pi.urls')),
path('races/', include('races.urls')),
path('weather/', include('weather.urls')),
url(r'^admin/', admin.site.urls),
path('admin/', admin.site.urls),
]

View File

@ -1,5 +1,4 @@
"""URL patterns for the facts web views."""
from django.conf.urls import url
from django.urls import path
from facts.views import factcategory_detail, index, rpc_get_facts, rpc_get_random_fact
@ -8,6 +7,6 @@ urlpatterns = [
path('rpc/<category>/', rpc_get_facts, name='weather_rpc_get_facts'),
path('rpc/<category>/random/', rpc_get_random_fact, name='weather_rpc_get_random_fact'),
url(r'^$', index, name='facts_index'),
url(r'^(?P<factcategory_name>.+)/$', factcategory_detail, name='facts_factcategory_detail'),
path('', index, name='facts_index'),
path('<factcategory_name>/', factcategory_detail, name='facts_factcategory_detail'),
]

View File

@ -1,16 +1,16 @@
"""URL patterns for the karma views."""
from django.conf.urls import url, include
from django.conf.urls import include
from django.urls import path
from rest_framework.routers import DefaultRouter
from karma.views import key_detail, index, KarmaKeyViewSet
from karma.views import KarmaKeyViewSet, index, key_detail
router = DefaultRouter()
router.register(r'keys', KarmaKeyViewSet)
urlpatterns = [
url(r'^$', index, name='karma_index'),
url(r'^key/(?P<karma_key>.+)/', key_detail, name='karma_key_detail'),
path('', index, name='karma_index'),
path('key/<karma_key>/', key_detail, name='karma_key_detail'),
url(r'^api/', include(router.urls)),
path('api/', include(router.urls)),
]

View File

@ -1,5 +1,6 @@
"""URL patterns for the pi views."""
from django.conf.urls import include, url
from django.conf.urls import include
from django.urls import path
from rest_framework.routers import DefaultRouter
from pi.views import PiLogViewSet
@ -8,5 +9,5 @@ router = DefaultRouter()
router.register(r'simulations', PiLogViewSet)
urlpatterns = [
url(r'^api/', include(router.urls)),
path('api/', include(router.urls)),
]

View File

@ -1,8 +1,8 @@
from django.conf.urls import url
from django.urls import path
from races.views import index, race_detail
urlpatterns = [
url(r'^$', index, name='races_index'),
url(r'^race/(?P<race_id>[A-Za-z0-9]+)/$', race_detail, name='race_detail'),
path('', index, name='races_index'),
path('race/<race_id>/', race_detail, name='race_detail'),
]

View File

@ -17,9 +17,10 @@ flake8-fixme
flake8-isort
flake8-logging-format
flake8-mutable
safety
# maintenance utilities and tox
pip-tools # pip-compile
tox # CI stuff
tox<4 # CI stuff
tox-wheel # build wheels in tox
versioneer # automatic version numbering

View File

@ -1,28 +1,32 @@
#
# This file is autogenerated by pip-compile with python 3.8
# To update, run:
# This file is autogenerated by pip-compile with Python 3.8
# by the following command:
#
# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in
#
asgiref==3.4.1
asgiref==3.6.0
# via django
attrs==21.2.0
attrs==22.2.0
# via pytest
backports.entry-points-selectable==1.1.0
# via virtualenv
bandit==1.7.0
autocommand==2.2.2
# via jaraco-text
bandit==1.7.4
# via -r requirements/requirements-dev.in
certifi==2021.10.8
# via requests
charset-normalizer==2.0.7
# via requests
click==8.0.3
build==0.10.0
# via pip-tools
coverage[toml]==6.0.2
certifi==2022.12.7
# via requests
charset-normalizer==3.0.1
# via requests
click==8.1.3
# via
# pip-tools
# safety
coverage[toml]==7.1.0
# via pytest-cov
distlib==0.3.3
distlib==0.3.6
# via virtualenv
django==3.2.8
django==3.2.18
# via
# -r requirements/requirements.in
# django-bootstrap3
@ -30,19 +34,23 @@ django==3.2.8
# djangorestframework
django-adminplus==0.5
# via -r requirements/requirements.in
django-bootstrap3==15.0.0
django-bootstrap3==22.2
# via -r requirements/requirements.in
django-extensions==3.1.3
django-extensions==3.2.1
# via -r requirements/requirements.in
djangorestframework==3.12.4
djangorestframework==3.14.0
# via -r requirements/requirements.in
dlint==0.11.0
dlint==0.14.0
# via -r requirements/requirements-dev.in
filelock==3.3.1
dparse==0.6.2
# via safety
exceptiongroup==1.1.0
# via pytest
filelock==3.9.0
# via
# tox
# virtualenv
flake8==3.9.2
flake8==6.0.0
# via
# -r requirements/requirements-dev.in
# dlint
@ -51,76 +59,84 @@ flake8==3.9.2
# flake8-executable
# flake8-isort
# flake8-mutable
flake8-blind-except==0.2.0
flake8-blind-except==0.2.1
# via -r requirements/requirements-dev.in
flake8-builtins==1.5.3
flake8-builtins==2.1.0
# via -r requirements/requirements-dev.in
flake8-docstrings==1.6.0
flake8-docstrings==1.7.0
# via -r requirements/requirements-dev.in
flake8-executable==2.1.1
flake8-executable==2.1.3
# via -r requirements/requirements-dev.in
flake8-fixme==1.1.1
# via -r requirements/requirements-dev.in
flake8-isort==4.1.1
flake8-isort==6.0.0
# via -r requirements/requirements-dev.in
flake8-logging-format==0.6.0
flake8-logging-format==0.9.0
# via -r requirements/requirements-dev.in
flake8-mutable==1.2.0
# via -r requirements/requirements-dev.in
gitdb==4.0.9
gitdb==4.0.10
# via gitpython
gitpython==3.1.24
gitpython==3.1.30
# via bandit
idna==3.3
idna==3.4
# via requests
inflect==5.3.0
# via jaraco.itertools
iniconfig==1.1.1
importlib-resources==5.10.2
# via jaraco-text
inflect==6.0.2
# via
# jaraco-itertools
# jaraco-text
iniconfig==2.0.0
# via pytest
irc==15.0.6
# via -r requirements/requirements.in
isort==5.9.3
isort==5.12.0
# via flake8-isort
jaraco.classes==3.2.1
# via jaraco.collections
jaraco.collections==3.4.0
jaraco-classes==3.2.3
# via jaraco-collections
jaraco-collections==3.8.0
# via irc
jaraco.functools==3.3.0
jaraco-context==4.3.0
# via jaraco-text
jaraco-functools==3.5.2
# via
# irc
# jaraco.text
# jaraco-text
# tempora
jaraco.itertools==6.0.3
jaraco-itertools==6.2.1
# via irc
jaraco.logging==3.1.0
jaraco-logging==3.1.2
# via irc
jaraco.stream==3.0.3
jaraco-stream==3.0.3
# via irc
jaraco.text==3.5.1
jaraco-text==3.11.1
# via
# irc
# jaraco.collections
mccabe==0.6.1
# jaraco-collections
mccabe==0.7.0
# via flake8
more-itertools==8.10.0
more-itertools==9.0.0
# via
# irc
# jaraco.classes
# jaraco.functools
# jaraco.itertools
packaging==21.0
# jaraco-classes
# jaraco-functools
# jaraco-itertools
# jaraco-text
packaging==21.3
# via
# build
# dparse
# pytest
# safety
# tox
parsedatetime==2.6
# via -r requirements/requirements.in
pbr==5.6.0
pbr==5.11.1
# via stevedore
pep517==0.12.0
# via pip-tools
pip-tools==6.4.0
pip-tools==6.12.2
# via -r requirements/requirements-dev.in
platformdirs==2.4.0
platformdirs==3.0.0
# via virtualenv
pluggy==1.0.0
# via
@ -128,96 +144,105 @@ pluggy==1.0.0
# tox
ply==3.11
# via -r requirements/requirements.in
py==1.10.0
# via
# pytest
# tox
pycodestyle==2.7.0
py==1.11.0
# via tox
pycodestyle==2.10.0
# via flake8
pydocstyle==6.1.1
pydantic==1.10.5
# via inflect
pydocstyle==6.3.0
# via flake8-docstrings
pyflakes==2.3.1
pyflakes==3.0.1
# via flake8
pyparsing==3.0.2
pyparsing==3.0.9
# via packaging
pytest==6.2.5
pyproject-hooks==1.0.0
# via build
pytest==7.2.1
# via
# -r requirements/requirements-dev.in
# pytest-cov
# pytest-django
pytest-cov==3.0.0
pytest-cov==4.0.0
# via -r requirements/requirements-dev.in
pytest-django==4.4.0
pytest-django==4.5.2
# via -r requirements/requirements-dev.in
python-dateutil==2.8.2
# via -r requirements/requirements.in
python-gitlab==2.10.1
python-gitlab==3.13.0
# via -r requirements/requirements.in
python-mpd2==3.0.4
python-mpd2==3.0.5
# via -r requirements/requirements.in
pytz==2021.3
pytz==2022.7.1
# via
# -r requirements/requirements.in
# django
# djangorestframework
# irc
# tempora
pyyaml==6.0
# via bandit
requests==2.26.0
requests==2.28.2
# via
# python-gitlab
# requests-toolbelt
requests-toolbelt==0.9.1
# safety
requests-toolbelt==0.10.1
# via python-gitlab
ruamel-yaml==0.17.21
# via safety
ruamel-yaml-clib==0.2.7
# via ruamel-yaml
safety==2.3.5
# via -r requirements/requirements-dev.in
six==1.16.0
# via
# bandit
# irc
# python-dateutil
# tox
# virtualenv
smmap==5.0.0
# via gitdb
snowballstemmer==2.1.0
snowballstemmer==2.2.0
# via pydocstyle
sqlparse==0.4.2
sqlparse==0.4.3
# via django
stevedore==3.5.0
stevedore==5.0.0
# via bandit
tempora==4.1.2
tempora==5.2.1
# via
# irc
# jaraco.logging
testfixtures==6.18.3
# via flake8-isort
# jaraco-logging
toml==0.10.2
# via dparse
tomli==2.0.1
# via
# build
# coverage
# pyproject-hooks
# pytest
# tox
tomli==1.2.2
# via
# coverage
# pep517
tox==3.24.4
tox==3.28.0
# via
# -r requirements/requirements-dev.in
# tox-wheel
tox-wheel==0.6.0
tox-wheel==1.0.0
# via -r requirements/requirements-dev.in
typing-extensions==3.10.0.2
# via gitpython
urllib3==1.26.7
typing-extensions==4.5.0
# via pydantic
urllib3==1.26.14
# via requests
versioneer==0.21
versioneer==0.28
# via -r requirements/requirements-dev.in
virtualenv==20.9.0
virtualenv==20.19.0
# via tox
wheel==0.37.0
wheel==0.38.4
# via
# pip-tools
# tox-wheel
zalgo-text==0.6
# via -r requirements/requirements.in
zipp==3.13.0
# via importlib-resources
# The following packages are considered to be unsafe in a requirements file:
# pip

View File

@ -1,4 +1,4 @@
Django # core
Django<4.0 # core
django-adminplus # admin.site.register_view
django-bootstrap3 # bootstrap layout
django-extensions # more commands

View File

@ -1,16 +1,18 @@
#
# This file is autogenerated by pip-compile with python 3.8
# To update, run:
# This file is autogenerated by pip-compile with Python 3.8
# by the following command:
#
# pip-compile --output-file=requirements/requirements.txt requirements/requirements.in
#
asgiref==3.4.1
asgiref==3.6.0
# via django
certifi==2021.10.8
autocommand==2.2.2
# via jaraco-text
certifi==2022.12.7
# via requests
charset-normalizer==2.0.7
charset-normalizer==3.0.1
# via requests
django==3.2.8
django==3.2.18
# via
# -r requirements/requirements.in
# django-bootstrap3
@ -18,75 +20,90 @@ django==3.2.8
# djangorestframework
django-adminplus==0.5
# via -r requirements/requirements.in
django-bootstrap3==15.0.0
django-bootstrap3==22.2
# via -r requirements/requirements.in
django-extensions==3.1.3
django-extensions==3.2.1
# via -r requirements/requirements.in
djangorestframework==3.12.4
djangorestframework==3.14.0
# via -r requirements/requirements.in
idna==3.3
idna==3.4
# via requests
inflect==5.3.0
# via jaraco.itertools
importlib-resources==5.10.2
# via jaraco-text
inflect==6.0.2
# via
# jaraco-itertools
# jaraco-text
irc==15.0.6
# via -r requirements/requirements.in
jaraco.classes==3.2.1
# via jaraco.collections
jaraco.collections==3.4.0
jaraco-classes==3.2.3
# via jaraco-collections
jaraco-collections==3.8.0
# via irc
jaraco.functools==3.3.0
jaraco-context==4.3.0
# via jaraco-text
jaraco-functools==3.5.2
# via
# irc
# jaraco.text
# jaraco-text
# tempora
jaraco.itertools==6.0.3
jaraco-itertools==6.2.1
# via irc
jaraco.logging==3.1.0
jaraco-logging==3.1.2
# via irc
jaraco.stream==3.0.3
jaraco-stream==3.0.3
# via irc
jaraco.text==3.5.1
jaraco-text==3.11.1
# via
# irc
# jaraco.collections
more-itertools==8.10.0
# jaraco-collections
more-itertools==9.0.0
# via
# irc
# jaraco.functools
# jaraco.itertools
# jaraco-classes
# jaraco-functools
# jaraco-itertools
# jaraco-text
parsedatetime==2.6
# via -r requirements/requirements.in
ply==3.11
# via -r requirements/requirements.in
pydantic==1.10.5
# via inflect
python-dateutil==2.8.2
# via -r requirements/requirements.in
python-gitlab==2.10.1
python-gitlab==3.13.0
# via -r requirements/requirements.in
python-mpd2==3.0.4
python-mpd2==3.0.5
# via -r requirements/requirements.in
pytz==2021.3
pytz==2022.7.1
# via
# -r requirements/requirements.in
# django
# djangorestframework
# irc
# tempora
requests==2.26.0
requests==2.28.2
# via
# python-gitlab
# requests-toolbelt
requests-toolbelt==0.9.1
requests-toolbelt==0.10.1
# via python-gitlab
six==1.16.0
# via
# irc
# python-dateutil
sqlparse==0.4.2
sqlparse==0.4.3
# via django
tempora==4.1.2
tempora==5.2.1
# via
# irc
# jaraco.logging
urllib3==1.26.7
# jaraco-logging
typing-extensions==4.5.0
# via pydantic
urllib3==1.26.14
# via requests
zalgo-text==0.6
# via -r requirements/requirements.in
zipp==3.13.0
# via importlib-resources

View File

@ -0,0 +1,26 @@
"""Test the countdown package's webservice."""
from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework.status import HTTP_200_OK
from rest_framework.test import APITestCase
from countdown.models import CountdownItem
class CountdownAPITest(APITestCase):
"""Test countdown DRF views."""
def setUp(self):
"""Do pre-test stuff."""
self.client = self.client_class()
self.user = User.objects.create(username='test')
self.client.force_authenticate(user=self.user)
def test_items_retrieval(self):
"""Test that the items endpoint returns objects."""
CountdownItem.objects.create(at_time=now())
resp = self.client.get('/countdown/api/items/')
self.assertEqual(resp.status_code, HTTP_200_OK)
self.assertEqual(len(resp.json()), CountdownItem.objects.count())

View File

@ -0,0 +1,29 @@
"""Test the dispatch package's webservice."""
from django.contrib.auth.models import User
from rest_framework.status import HTTP_200_OK
from rest_framework.test import APITestCase
from dispatch.models import Dispatcher, DispatcherAction
class DispatchAPITest(APITestCase):
"""Test dispatch DRF views."""
def setUp(self):
"""Do pre-test stuff."""
self.client = self.client_class()
self.user = User.objects.create(username='test')
self.client.force_authenticate(user=self.user)
def test_dispatch_object_retrieval(self):
"""Test that the list endpoints returns objects."""
dispatcher = Dispatcher.objects.create()
DispatcherAction.objects.create(dispatcher=dispatcher)
resp = self.client.get('/dispatch/api/dispatchers/')
self.assertEqual(resp.status_code, HTTP_200_OK)
self.assertEqual(len(resp.json()), Dispatcher.objects.count())
resp = self.client.get('/dispatch/api/actions/')
self.assertEqual(resp.status_code, HTTP_200_OK)
self.assertEqual(len(resp.json()), DispatcherAction.objects.count())

View File

@ -22,4 +22,4 @@ class PiAPITest(APITestCase):
resp = self.client.post('/pi/api/simulations/simulate/')
self.assertEqual(resp.status_code, HTTP_201_CREATED)
self.assertEqual(PiLog.objects.count(), 2) # 2 because 0 entry and the real entry
self.assertEqual(PiLog.objects.count(), 2)

29
tests/test_races_views.py Normal file
View File

@ -0,0 +1,29 @@
"""Test the race views."""
from unittest import mock
from django.test import TestCase
from django.utils.timezone import now
from races.models import Race, Racer, RaceUpdate
class RaceViewTest(TestCase):
"""Test races views."""
def setUp(self):
"""Do pre-test stuff."""
self.client = self.client_class()
def test_race_display(self):
"""Test the display of race info when it's been somewhat populated."""
race = Race.objects.create(key='test')
racer_a = Racer.objects.create(nick='hank', race=race)
racer_b = Racer.objects.create(nick='bob', race=race)
RaceUpdate.objects.create(race=race, racer=racer_a, update="test 1")
RaceUpdate.objects.create(race=race, racer=racer_b, update="test 2")
RaceUpdate.objects.create(race=race, racer=racer_a, update="test 3")
resp = self.client.get('/races/race/test/')
self.assertIn(b'hank &mdash; test 1', resp.content)
self.assertIn(b'bob &mdash; test 2', resp.content)
self.assertIn(b'hank &mdash; test 3', resp.content)

97
tox.ini
View File

@ -4,7 +4,7 @@
# and then run "tox" from this directory.
[tox]
envlist = begin,py36,py37,py38,coverage,security,lint,bundle
envlist = begin,py38,py39,py310,coverage,security,lint,bundle
[testenv]
# build a wheel and test it
@ -31,52 +31,6 @@ deps = setuptools
skip_install = true
commands = coverage erase
[testenv:py36]
# run pytest with coverage
commands =
pytest --cov-append --cov-branch \
--cov={envsitepackagesdir}/acro/ \
--cov={envsitepackagesdir}/countdown/ \
--cov={envsitepackagesdir}/dice/ \
--cov={envsitepackagesdir}/dispatch/ \
--cov={envsitepackagesdir}/dr_botzo/ \
--cov={envsitepackagesdir}/facts/ \
--cov={envsitepackagesdir}/gitlab_bot/ \
--cov={envsitepackagesdir}/ircbot/ \
--cov={envsitepackagesdir}/karma/ \
--cov={envsitepackagesdir}/markov/ \
--cov={envsitepackagesdir}/mpdbot/ \
--cov={envsitepackagesdir}/pi/ \
--cov={envsitepackagesdir}/races/ \
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/twitter/ \
--cov={envsitepackagesdir}/weather/
[testenv:py37]
# run pytest with coverage
commands =
pytest --cov-append --cov-branch \
--cov={envsitepackagesdir}/acro/ \
--cov={envsitepackagesdir}/countdown/ \
--cov={envsitepackagesdir}/dice/ \
--cov={envsitepackagesdir}/dispatch/ \
--cov={envsitepackagesdir}/dr_botzo/ \
--cov={envsitepackagesdir}/facts/ \
--cov={envsitepackagesdir}/gitlab_bot/ \
--cov={envsitepackagesdir}/ircbot/ \
--cov={envsitepackagesdir}/karma/ \
--cov={envsitepackagesdir}/markov/ \
--cov={envsitepackagesdir}/mpdbot/ \
--cov={envsitepackagesdir}/pi/ \
--cov={envsitepackagesdir}/races/ \
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/twitter/ \
--cov={envsitepackagesdir}/weather/
[testenv:py38]
# run pytest with coverage
commands =
@ -97,7 +51,50 @@ commands =
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/twitter/ \
--cov={envsitepackagesdir}/weather/
[testenv:py39]
# run pytest with coverage
commands =
pytest --cov-append --cov-branch \
--cov={envsitepackagesdir}/acro/ \
--cov={envsitepackagesdir}/countdown/ \
--cov={envsitepackagesdir}/dice/ \
--cov={envsitepackagesdir}/dispatch/ \
--cov={envsitepackagesdir}/dr_botzo/ \
--cov={envsitepackagesdir}/facts/ \
--cov={envsitepackagesdir}/gitlab_bot/ \
--cov={envsitepackagesdir}/ircbot/ \
--cov={envsitepackagesdir}/karma/ \
--cov={envsitepackagesdir}/markov/ \
--cov={envsitepackagesdir}/mpdbot/ \
--cov={envsitepackagesdir}/pi/ \
--cov={envsitepackagesdir}/races/ \
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/weather/
[testenv:py310]
# run pytest with coverage
commands =
pytest --cov-append --cov-branch \
--cov={envsitepackagesdir}/acro/ \
--cov={envsitepackagesdir}/countdown/ \
--cov={envsitepackagesdir}/dice/ \
--cov={envsitepackagesdir}/dispatch/ \
--cov={envsitepackagesdir}/dr_botzo/ \
--cov={envsitepackagesdir}/facts/ \
--cov={envsitepackagesdir}/gitlab_bot/ \
--cov={envsitepackagesdir}/ircbot/ \
--cov={envsitepackagesdir}/karma/ \
--cov={envsitepackagesdir}/markov/ \
--cov={envsitepackagesdir}/mpdbot/ \
--cov={envsitepackagesdir}/pi/ \
--cov={envsitepackagesdir}/races/ \
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/weather/
[testenv:coverage]
@ -110,6 +107,7 @@ commands =
# run security checks
#
# again it seems the most valuable here to run against the packaged code
# might not need to ignore 51457 after a tox bump
commands =
bandit \
{envsitepackagesdir}/acro/ \
@ -128,9 +126,9 @@ commands =
{envsitepackagesdir}/seen/ \
{envsitepackagesdir}/storycraft/ \
{envsitepackagesdir}/transform/ \
{envsitepackagesdir}/twitter/ \
{envsitepackagesdir}/weather/ \
-r
safety check -r requirements/requirements-dev.txt -i 51457
[testenv:lint]
# run style checks
@ -172,7 +170,6 @@ include =
{envsitepackagesdir}/seen/
{envsitepackagesdir}/storycraft/
{envsitepackagesdir}/transform/
{envsitepackagesdir}/twitter/
{envsitepackagesdir}/weather/
omit =