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

View File

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

View File

@ -68,7 +68,7 @@ ROOT_URLCONF = 'dr_botzo.urls'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', '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, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [

View File

@ -1,8 +1,7 @@
"""General/baselite/site-wide URLs.""" """General/baselite/site-wide URLs."""
from adminplus.sites import AdminSitePlus 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.contrib import admin
from django.urls import path
from django.views.generic import TemplateView from django.views.generic import TemplateView
admin.site = AdminSitePlus() admin.site = AdminSitePlus()
@ -10,17 +9,17 @@ admin.sites.site = admin.site
admin.autodiscover() admin.autodiscover()
urlpatterns = [ 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')), url(r'^countdown/', include('countdown.urls')),
path('dice/', include('dice.urls')), url(r'^dice/', include('dice.urls')),
path('dispatch/', include('dispatch.urls')), url(r'^dispatch/', include('dispatch.urls')),
path('itemsets/', include('facts.urls')), url(r'^itemsets/', include('facts.urls')),
path('karma/', include('karma.urls')), url(r'^karma/', include('karma.urls')),
path('markov/', include('markov.urls')), url(r'^markov/', include('markov.urls')),
path('pi/', include('pi.urls')), url(r'^pi/', include('pi.urls')),
path('races/', include('races.urls')), url(r'^races/', include('races.urls')),
path('weather/', include('weather.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.""" """URL patterns for the facts web views."""
from django.conf.urls import url
from django.urls import path from django.urls import path
from facts.views import factcategory_detail, index, rpc_get_facts, rpc_get_random_fact 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>/', rpc_get_facts, name='weather_rpc_get_facts'),
path('rpc/<category>/random/', rpc_get_random_fact, name='weather_rpc_get_random_fact'), path('rpc/<category>/random/', rpc_get_random_fact, name='weather_rpc_get_random_fact'),
path('', index, name='facts_index'), url(r'^$', index, name='facts_index'),
path('<factcategory_name>/', factcategory_detail, name='facts_factcategory_detail'), url(r'^(?P<factcategory_name>.+)/$', factcategory_detail, name='facts_factcategory_detail'),
] ]

View File

@ -1,16 +1,16 @@
"""URL patterns for the karma views.""" """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 rest_framework.routers import DefaultRouter
from karma.views import KarmaKeyViewSet, index, key_detail from karma.views import key_detail, index, KarmaKeyViewSet
router = DefaultRouter() router = DefaultRouter()
router.register(r'keys', KarmaKeyViewSet) router.register(r'keys', KarmaKeyViewSet)
urlpatterns = [ urlpatterns = [
path('', index, name='karma_index'), url(r'^$', index, name='karma_index'),
path('key/<karma_key>/', key_detail, name='karma_key_detail'), 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.""" """URL patterns for the pi views."""
from django.conf.urls import include from django.conf.urls import include, url
from django.urls import path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from pi.views import PiLogViewSet from pi.views import PiLogViewSet
@ -9,5 +8,5 @@ router = DefaultRouter()
router.register(r'simulations', PiLogViewSet) router.register(r'simulations', PiLogViewSet)
urlpatterns = [ 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 from races.views import index, race_detail
urlpatterns = [ urlpatterns = [
path('', index, name='races_index'), url(r'^$', index, name='races_index'),
path('race/<race_id>/', race_detail, name='race_detail'), 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-isort
flake8-logging-format flake8-logging-format
flake8-mutable flake8-mutable
safety
# maintenance utilities and tox # maintenance utilities and tox
pip-tools # pip-compile pip-tools # pip-compile
tox<4 # CI stuff tox # CI stuff
tox-wheel # build wheels in tox tox-wheel # build wheels in tox
versioneer # automatic version numbering versioneer # automatic version numbering

View File

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

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

View File

@ -1,18 +1,16 @@
# #
# This file is autogenerated by pip-compile with Python 3.8 # This file is autogenerated by pip-compile with python 3.8
# by the following command: # To update, run:
# #
# pip-compile --output-file=requirements/requirements.txt requirements/requirements.in # pip-compile --output-file=requirements/requirements.txt requirements/requirements.in
# #
asgiref==3.6.0 asgiref==3.4.1
# via django # via django
autocommand==2.2.2 certifi==2021.10.8
# via jaraco-text
certifi==2022.12.7
# via requests # via requests
charset-normalizer==3.0.1 charset-normalizer==2.0.7
# via requests # via requests
django==3.2.18 django==3.2.8
# via # via
# -r requirements/requirements.in # -r requirements/requirements.in
# django-bootstrap3 # django-bootstrap3
@ -20,90 +18,75 @@ django==3.2.18
# djangorestframework # djangorestframework
django-adminplus==0.5 django-adminplus==0.5
# via -r requirements/requirements.in # via -r requirements/requirements.in
django-bootstrap3==22.2 django-bootstrap3==15.0.0
# via -r requirements/requirements.in # via -r requirements/requirements.in
django-extensions==3.2.1 django-extensions==3.1.3
# via -r requirements/requirements.in # via -r requirements/requirements.in
djangorestframework==3.14.0 djangorestframework==3.12.4
# via -r requirements/requirements.in # via -r requirements/requirements.in
idna==3.4 idna==3.3
# via requests # via requests
importlib-resources==5.10.2 inflect==5.3.0
# via jaraco-text # via jaraco.itertools
inflect==6.0.2
# via
# jaraco-itertools
# jaraco-text
irc==15.0.6 irc==15.0.6
# via -r requirements/requirements.in # via -r requirements/requirements.in
jaraco-classes==3.2.3 jaraco.classes==3.2.1
# via jaraco-collections # via jaraco.collections
jaraco-collections==3.8.0 jaraco.collections==3.4.0
# via irc # via irc
jaraco-context==4.3.0 jaraco.functools==3.3.0
# via jaraco-text
jaraco-functools==3.5.2
# via # via
# irc # irc
# jaraco-text # jaraco.text
# tempora # tempora
jaraco-itertools==6.2.1 jaraco.itertools==6.0.3
# via irc # via irc
jaraco-logging==3.1.2 jaraco.logging==3.1.0
# via irc # via irc
jaraco-stream==3.0.3 jaraco.stream==3.0.3
# via irc # via irc
jaraco-text==3.11.1 jaraco.text==3.5.1
# via # via
# irc # irc
# jaraco-collections # jaraco.collections
more-itertools==9.0.0 more-itertools==8.10.0
# via # via
# irc # irc
# jaraco-classes # jaraco.functools
# jaraco-functools # jaraco.itertools
# jaraco-itertools
# jaraco-text
parsedatetime==2.6 parsedatetime==2.6
# via -r requirements/requirements.in # via -r requirements/requirements.in
ply==3.11 ply==3.11
# via -r requirements/requirements.in # via -r requirements/requirements.in
pydantic==1.10.5
# via inflect
python-dateutil==2.8.2 python-dateutil==2.8.2
# via -r requirements/requirements.in # via -r requirements/requirements.in
python-gitlab==3.13.0 python-gitlab==2.10.1
# via -r requirements/requirements.in # via -r requirements/requirements.in
python-mpd2==3.0.5 python-mpd2==3.0.4
# via -r requirements/requirements.in # via -r requirements/requirements.in
pytz==2022.7.1 pytz==2021.3
# via # via
# -r requirements/requirements.in # -r requirements/requirements.in
# django # django
# djangorestframework
# irc # irc
# tempora # tempora
requests==2.28.2 requests==2.26.0
# via # via
# python-gitlab # python-gitlab
# requests-toolbelt # requests-toolbelt
requests-toolbelt==0.10.1 requests-toolbelt==0.9.1
# via python-gitlab # via python-gitlab
six==1.16.0 six==1.16.0
# via # via
# irc # irc
# python-dateutil # python-dateutil
sqlparse==0.4.3 sqlparse==0.4.2
# via django # via django
tempora==5.2.1 tempora==4.1.2
# via # via
# irc # irc
# jaraco-logging # jaraco.logging
typing-extensions==4.5.0 urllib3==1.26.7
# via pydantic
urllib3==1.26.14
# via requests # via requests
zalgo-text==0.6 zalgo-text==0.6
# via -r requirements/requirements.in # 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/') resp = self.client.post('/pi/api/simulations/simulate/')
self.assertEqual(resp.status_code, HTTP_201_CREATED) 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. # and then run "tox" from this directory.
[tox] [tox]
envlist = begin,py38,py39,py310,coverage,security,lint,bundle envlist = begin,py36,py37,py38,coverage,security,lint,bundle
[testenv] [testenv]
# build a wheel and test it # build a wheel and test it
@ -31,6 +31,52 @@ deps = setuptools
skip_install = true skip_install = true
commands = coverage erase 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] [testenv:py38]
# run pytest with coverage # run pytest with coverage
commands = commands =
@ -51,50 +97,7 @@ commands =
--cov={envsitepackagesdir}/seen/ \ --cov={envsitepackagesdir}/seen/ \
--cov={envsitepackagesdir}/storycraft/ \ --cov={envsitepackagesdir}/storycraft/ \
--cov={envsitepackagesdir}/transform/ \ --cov={envsitepackagesdir}/transform/ \
--cov={envsitepackagesdir}/weather/ --cov={envsitepackagesdir}/twitter/ \
[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/ --cov={envsitepackagesdir}/weather/
[testenv:coverage] [testenv:coverage]
@ -107,7 +110,6 @@ commands =
# 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
# might not need to ignore 51457 after a tox bump
commands = commands =
bandit \ bandit \
{envsitepackagesdir}/acro/ \ {envsitepackagesdir}/acro/ \
@ -126,9 +128,9 @@ commands =
{envsitepackagesdir}/seen/ \ {envsitepackagesdir}/seen/ \
{envsitepackagesdir}/storycraft/ \ {envsitepackagesdir}/storycraft/ \
{envsitepackagesdir}/transform/ \ {envsitepackagesdir}/transform/ \
{envsitepackagesdir}/twitter/ \
{envsitepackagesdir}/weather/ \ {envsitepackagesdir}/weather/ \
-r -r
safety check -r requirements/requirements-dev.txt -i 51457
[testenv:lint] [testenv:lint]
# run style checks # run style checks
@ -170,6 +172,7 @@ include =
{envsitepackagesdir}/seen/ {envsitepackagesdir}/seen/
{envsitepackagesdir}/storycraft/ {envsitepackagesdir}/storycraft/
{envsitepackagesdir}/transform/ {envsitepackagesdir}/transform/
{envsitepackagesdir}/twitter/
{envsitepackagesdir}/weather/ {envsitepackagesdir}/weather/
omit = omit =