diff --git a/.github/workflows/test-docs.yml b/.github/workflows/test-docs.yml
index f906703..2fcf1fa 100644
--- a/.github/workflows/test-docs.yml
+++ b/.github/workflows/test-docs.yml
@@ -14,4 +14,4 @@ jobs:
with:
node-version: 20 # The node version needs to stay in sync with .readthedocs.yml
python-version: '3.11' # This needs to stay in sync with .readthedocs.yml and the tox config in pyproject.toml
- tox-env-array: '["docs"]' # TODO: add "doctests" environment
+ tox-env-array: '["docs"]' # TODO: , "doctests"]'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fefdd1..0c402c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,14 @@ Valid subsections within a version are:
Things to be included in the next release go here.
+### Fixed
+
+- Added missing dependencies to `pyproject.toml`.
+
+### Changed
+
+- Updated all documentation links to use the proper URL.
+
---
## v0.1.0 (2024-09-11)
@@ -39,5 +47,3 @@ Things to be included in the next release go here.
### Added
- First release of `tm_data_types`!
-
----
diff --git a/README.md b/README.md
index 4e8a5f4..b060eff 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
| **Testing** | [](https://github.com/tektronix/tm_data_types/actions/workflows/test-code.yml) [](https://github.com/tektronix/tm_data_types/actions/workflows/test-docs.yml) [](https://codecov.io/gh/tektronix/tm_data_types) |
| **Code Quality** | [](https://github.com/tektronix/tm_data_types/actions/workflows/codeql-analysis.yml) [](https://www.codefactor.io/repository/github/tektronix/tm_data_types) [](https://results.pre-commit.ci/latest/github/tektronix/tm_data_types/main) |
| **Package** | [](https://pypi.org/project/tm_data_types/) [](https://pypi.org/project/tm_data_types/) [](https://pypi.org/project/tm_data_types/) [](https://pepy.tech/project/tm_data_types) [](https://github.com/tektronix/tm_data_types/blob/main/LICENSE.md) [](https://github.com/tektronix/tm_data_types/actions/workflows/package-build.yml) [](https://github.com/tektronix/tm_data_types/actions/workflows/package-release.yml) |
-| **Documentation** | [](https://tm_data_types.readthedocs.io/stable) |
+| **Documentation** | [](https://tm-data-types.readthedocs.io) |
| **Code Style** | [](https://github.com/pytest-dev/pytest) [](https://docs.astral.sh/ruff/formatter/) [](https://google.github.io/styleguide/pyguide.html) |
| **Linting** | [](https://github.com/pre-commit/pre-commit) [](https://github.com/PyCQA/docformatter)[](https://github.com/pylint-dev/pylint) |
@@ -64,7 +64,7 @@ waveform = read_file(file_path)
## Documentation
-See the full documentation at
+See the full documentation at
## Maintainers
diff --git a/docs/known_words.txt b/docs/known_words.txt
index 23e2040..bf4d7f2 100644
--- a/docs/known_words.txt
+++ b/docs/known_words.txt
@@ -19,6 +19,7 @@ socio
styleguide
sublicense
tektronix
+tm
tm_data_types
wfm
www
diff --git a/pyproject.toml b/pyproject.toml
index da836c8..6d3c58b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,7 @@ classifiers = [
"Topic :: System :: Hardware :: Hardware Drivers"
]
description = "Read and write common Test & Measurement data types."
-documentation = "https://tm-data-types.readthedocs.io/stable/"
+documentation = "https://tm-data-types.readthedocs.io"
homepage = "https://pypi.org/project/tm_data_types/"
keywords = [
"Tektronix",
@@ -61,6 +61,7 @@ numpy = [
]
pydantic = "^2.7.4"
python = "^3.8"
+python-dateutil = "^2.8.2"
scipy = [
{python = "^3.9", version = "^1.12"},
{python = "^3.8, <3.12", version = "^1.10"}
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000..37269a5
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,5 @@
+"""Pytest configuration file."""
+
+from pathlib import Path
+
+PROJECT_ROOT_DIR = Path(__file__).parent.parent
diff --git a/tests/test_docs.py b/tests/test_docs.py
new file mode 100644
index 0000000..66e2a13
--- /dev/null
+++ b/tests/test_docs.py
@@ -0,0 +1,79 @@
+"""Test for the documentation."""
+
+import os
+import shlex
+import subprocess
+import sys
+import time
+
+from importlib.util import find_spec
+from pathlib import Path
+from typing import Generator
+
+import pytest
+
+from conftest import PROJECT_ROOT_DIR
+
+
+@pytest.fixture(name="docs_server")
+def fixture_docs_server(site_dir: str) -> Generator[str, None, None]:
+ """Serve the documentation site."""
+ port = f"8{sys.version_info.major}{sys.version_info.minor}"
+ cmd = [sys.executable, "-m", "http.server", port, "--directory", site_dir]
+ with subprocess.Popen( # noqa: S603
+ cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ ) as server_process:
+ time.sleep(1) # wait for server to start
+
+ yield f"http://127.0.0.1:{port}/"
+
+ server_process.terminate() # stop the server
+ try:
+ server_process.wait(timeout=10) # Wait up to 10 seconds for the server to terminate
+ except subprocess.TimeoutExpired:
+ server_process.kill() # Force kill if it doesn't terminate in time
+
+
+@pytest.fixture(name="site_dir", scope="session")
+def fixture_site_dir(pytestconfig: pytest.Config) -> str:
+ """Create the site directory path for testing."""
+ site_path = (
+ Path(__file__).parent.parent / f".site_{sys.version_info.major}{sys.version_info.minor}/"
+ ).resolve()
+ if xml_path := pytestconfig.getoption("xmlpath"):
+ site_path = (Path(xml_path).parent / ".site_html/").resolve() # pyright: ignore[reportArgumentType]
+ site_path.mkdir(parents=True, exist_ok=True)
+ return site_path.as_posix()
+
+
+@pytest.fixture(scope="module", autouse=True)
+def _docs_tests_setup() -> Generator[None, None, None]: # pyright: ignore [reportUnusedFunction]
+ """Setup for docs tests.."""
+ starting_directory = os.getcwd()
+ try:
+ os.chdir(PROJECT_ROOT_DIR)
+ yield
+ finally:
+ os.chdir(starting_directory)
+
+
+@pytest.mark.docs
+@pytest.mark.slow
+@pytest.mark.skipif(find_spec("mkdocs") is None, reason="The mkdocs package is not installed.")
+class TestDocs: # pylint: disable=no-self-use
+ """A collection of documentation tests."""
+
+ @pytest.mark.order(1)
+ def test_docs_html(self, site_dir: str) -> None:
+ """Test creating html documentation."""
+ subprocess.check_call(shlex.split(f"mkdocs build --verbose --site-dir={site_dir}")) # noqa: S603
+
+ @pytest.mark.order(2)
+ @pytest.mark.depends(on=["test_docs_html"])
+ def test_docs_linkcheck(self, docs_server: str) -> None:
+ """Run the linkcheck test for the documentation."""
+ subprocess.check_call( # noqa: S603
+ shlex.split(f"linkchecker --config=docs/.linkchecker.ini {docs_server}")
+ )