Repository: crate/sphinx_csv_filter (language: python)

Issue:
Compatibility with `docutils>=0.19`
Hi. With 7faeb4f, we limited runtime dependencies to `docutils<0.19`. When upgrading, the tests croak like this.

```python
______ ERROR collecting tests/test_csv.py ______
tests/test_csv.py:49: in <module>
    directive = CSVFilterDirective(
.venv/lib/python3.11/site-packages/docutils/parsers/rst/__init__.py:331: in __init__
    self.reporter = state_machine.reporter
E   AttributeError: 'NoneType' object has no attribute 'reporter'
```



Discussion / hints:
Hi! I've been trying to package `sphinx_csv_filter` for use in a larger environment, and the `docutils` dependency limit has caused minor pain.

I took a look at the failing tests, and they seem to crash only because of an issue with the constructor arguments: The `Directive` constructor was changed to actually access one of its arguments (`state_machine.reporter`), but the tests pass all `None`s to it.

If I change those dummy arguments to something like
```python
class Dummy:
    def __init__():
        self.reporter = None

directive = CSVFilterDirective(
    None, None, None, None, None, None, None, None, Dummy())
```
all the tests pass again.

If the failing tests are the only reason for the dependency bound, I suspect it's actually not necessary.

Fix patch:
diff --git a/setup.py b/setup.py
index 8aa2155..ba71c73 100644
--- a/setup.py
+++ b/setup.py
@@ -55,7 +55,7 @@ def read(path):
             "wheel",
         ],
         "testing": [
-            "flake8<5",
+            "flake8",
             "pytest",
             "pytest-cov",
             "pytest-flake8",
@@ -63,7 +63,6 @@ def read(path):
         ]
     },
     install_requires=[
-        "docutils<0.19",
         "Sphinx",
     ],
     python_requires=">=3.3",
@@ -74,15 +73,12 @@ def read(path):
         'Operating System :: OS Independent',
         'Programming Language :: Python',
         'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.3',
-        'Programming Language :: Python :: 3.4',
-        'Programming Language :: Python :: 3.5',
-        'Programming Language :: Python :: 3.6',
-        'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
         'Programming Language :: Python :: 3.10',
         'Programming Language :: Python :: 3.11',
+        'Programming Language :: Python :: 3.12',
+        'Programming Language :: Python :: 3.13',
         'Programming Language :: Python :: Implementation :: CPython',
         'Topic :: Documentation',
         'Topic :: Documentation :: Sphinx',
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..01770a4
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,9 @@
+
+[tox]
+envlist = py{38,39,310,311,312,313}
+
+[testenv]
+extras =
+    testing
+commands =
+    python -m pytest {posargs}


Test patch:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index d8ffd12..43aa8f9 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -20,14 +20,14 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        os: ['ubuntu-20.04']
-        python-version: ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11']
+        os: ['ubuntu-22.04']
+        python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
       fail-fast: true
 
     steps:
       - uses: actions/checkout@v3
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v4
+        uses: actions/setup-python@v5
         with:
           python-version: ${{ matrix.python-version }}
           cache: 'pip'
diff --git a/tests/test_csv.py b/tests/test_csv.py
index 76ce26a..7c55f59 100644
--- a/tests/test_csv.py
+++ b/tests/test_csv.py
@@ -47,7 +47,7 @@ def test_non_negative_int_list(input, expected):
 directive_params = ['Company,Contact,Country,Attend?'], None, 'source'
 
 directive = CSVFilterDirective(
-    None, None, None, None, None, None, None, None, None)
+    None, None, None, None, None, None, None, None, mock.Mock())
 tmp_directive_options = {
     'header': 'Company,Contact,Country,Attend?',
     'delim': '\t',