Compare commits

..

No commits in common. "1cf0364268452ccc8470d082de3abd87eda337b1" and "76bcdd5fefdd95ac7bbb9d7f4adfaca17a2886eb" have entirely different histories.

24 changed files with 225 additions and 353 deletions

View File

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

View File

@ -1,16 +1,20 @@
"""URL patterns for the dispatcher API."""
from django.urls import path
from dispatch.views import (DispatcherActionDetail, DispatcherActionList, DispatcherDetail, DispatcherDetailByKey,
DispatcherList, DispatchMessage, DispatchMessageByKey)
from django.conf.urls import url
from dispatch.views import (DispatchMessage, DispatchMessageByKey, DispatcherList, DispatcherDetail,
DispatcherDetailByKey, DispatcherActionList, DispatcherActionDetail)
urlpatterns = [
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/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/actions/', DispatcherActionList.as_view(), name='dispatch_api_actions'),
path('api/actions/<pk>/', DispatcherActionDetail.as_view(), name='dispatch_api_action_detail'),
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'),
]

View File

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

View File

@ -1,8 +1,7 @@
"""General/baselite/site-wide URLs."""
from adminplus.sites import AdminSitePlus
from django.conf.urls import include
from django.conf.urls import include, url
from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView
admin.site = AdminSitePlus()
@ -10,17 +9,17 @@ admin.sites.site = admin.site
admin.autodiscover()
urlpatterns = [
path('', TemplateView.as_view(template_name='index.html'), name='index'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
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'^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('admin/', admin.site.urls),
url(r'^admin/', admin.site.urls),
]

View File

@ -1,4 +1,5 @@
"""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
@ -7,6 +8,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'),
path('', index, name='facts_index'),
path('<factcategory_name>/', factcategory_detail, name='facts_factcategory_detail'),
url(r'^$', index, name='facts_index'),
url(r'^(?P<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 include
from django.urls import path
from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from karma.views import KarmaKeyViewSet, index, key_detail
from karma.views import key_detail, index, KarmaKeyViewSet
router = DefaultRouter()
router.register(r'keys', KarmaKeyViewSet)
urlpatterns = [
path('', index, name='karma_index'),
path('key/<karma_key>/', key_detail, name='karma_key_detail'),
url(r'^$', index, name='karma_index'),
url(r'^key/(?P<karma_key>.+)/', key_detail, name='karma_key_detail'),
path('api/', include(router.urls)),
url(r'^api/', include(router.urls)),
]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,26 +0,0 @@
"""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

@ -1,29 +0,0 @@
"""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)
self.assertEqual(PiLog.objects.count(), 2) # 2 because 0 entry and the real entry

View File

@ -1,29 +0,0 @@
"""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,py38,py39,py310,coverage,security,lint,bundle
envlist = begin,py36,py37,py38,coverage,security,lint,bundle
[testenv]
# build a wheel and test it
@ -31,6 +31,52 @@ 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 =
@ -51,50 +97,7 @@ commands =
--cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \
--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}/twitter/ \
--cov={envsitepackagesdir}/weather/
[testenv:coverage]
@ -107,7 +110,6 @@ 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/ \
@ -126,9 +128,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
@ -170,6 +172,7 @@ include =
{envsitepackagesdir}/seen/
{envsitepackagesdir}/storycraft/
{envsitepackagesdir}/transform/
{envsitepackagesdir}/twitter/
{envsitepackagesdir}/weather/
omit =