refactor: rename the application package to docsgpt

The backend import package is now docsgpt, the name it will carry on PyPI;
application was far too generic to install into anyone's site-packages.
git mv plus a mechanical rewrite of every import, dotted string and path
reference: 734 Python files, the compose files, Dockerfile, workflows, docs,
setup scripts, devcontainer, k8s manifests, vscode config, pytest and coverage
config, .gitignore. Behaviour is unchanged.

Kept for one release:
- A top-level application package whose meta-path finder resolves
  application.x.y to the already-imported docsgpt.x.y object, so old imports
  and entry points (celery -A application.app.celery,
  uvicorn application.asgi:asgi_app) keep working with a FutureWarning.
- Celery registers every application.* task name as an alias of its
  docsgpt.* task on start-up, so messages queued by the previous release still
  run. The redbeat key prefix moves to redbeat:docsgpt:v2: so schedule entries
  the previous release wrote are left unread instead of firing twice.

The backend image builds from the repository root (docker build -f
docsgpt/Dockerfile .) so it can ship the alias package; a root .dockerignore
allow-lists docsgpt/ and application/ and keeps caches, local data, .env
files, the sample index files and the Dockerfile out. Compose and the image
workflows point at the new context.
This commit is contained in:
Alex committed 2026-09-07 10:20:43 +01:00
1 parent 3e7f1f91b4
commit 574f96341e
984 files changed
+9847 -9682

No files matched your search

+11 -11
View File
@@ -1,10 +1,10 @@
"""Tests for application/agents/tools/spec_parser.py"""
"""Tests for docsgpt/agents/tools/spec_parser.py"""
import json
import pytest
from application.agents.tools.spec_parser import (
from docsgpt.agents.tools.spec_parser import (
_extract_metadata,
_generate_action_name,
_get_base_url,
@@ -473,14 +473,14 @@ paths:
def test_traverse_path_key_error(self):
"""Cover lines 173-176: _traverse_path returns None on KeyError."""
from application.agents.tools.spec_parser import _traverse_path
from docsgpt.agents.tools.spec_parser import _traverse_path
result = _traverse_path({"a": {"b": 1}}, ["a", "c"])
assert result is None
def test_traverse_path_non_dict_result(self):
"""Cover line 175-176: _traverse_path returns None for non-dict result."""
from application.agents.tools.spec_parser import _traverse_path
from docsgpt.agents.tools.spec_parser import _traverse_path
result = _traverse_path({"a": "string_value"}, ["a"])
assert result is None
@@ -529,7 +529,7 @@ class TestSpecParserAdditionalCoverage:
def test_categorize_params_query_and_header(self):
"""Cover lines 205, 209, 213: parameters categorized into query and header."""
from application.agents.tools.spec_parser import _categorize_parameters
from docsgpt.agents.tools.spec_parser import _categorize_parameters
parameters = [
{"name": "q", "in": "query", "required": True, "description": "Query param"},
@@ -543,7 +543,7 @@ class TestSpecParserAdditionalCoverage:
def test_categorize_params_skips_no_name(self):
"""Cover line 205: parameters without name are skipped."""
from application.agents.tools.spec_parser import _categorize_parameters
from docsgpt.agents.tools.spec_parser import _categorize_parameters
parameters = [
{"in": "query"}, # no name
@@ -554,7 +554,7 @@ class TestSpecParserAdditionalCoverage:
def test_param_to_property_integer_type(self):
"""Cover lines 216-217, 222, 228: _param_to_property with integer type."""
from application.agents.tools.spec_parser import _param_to_property
from docsgpt.agents.tools.spec_parser import _param_to_property
param = {
"name": "count",
@@ -569,7 +569,7 @@ class TestSpecParserAdditionalCoverage:
def test_param_to_property_number_type(self):
"""Cover line 222: number type mapped to integer."""
from application.agents.tools.spec_parser import _param_to_property
from docsgpt.agents.tools.spec_parser import _param_to_property
param = {
"schema": {"type": "number"},
@@ -581,7 +581,7 @@ class TestSpecParserAdditionalCoverage:
def test_param_to_property_string_default(self):
"""Cover line 222: unknown type defaults to string."""
from application.agents.tools.spec_parser import _param_to_property
from docsgpt.agents.tools.spec_parser import _param_to_property
param = {"description": "Desc", "required": False}
prop = _param_to_property(param)
@@ -589,7 +589,7 @@ class TestSpecParserAdditionalCoverage:
def test_param_to_property_description_truncated(self):
"""Cover line 228: description truncated to 200 chars."""
from application.agents.tools.spec_parser import _param_to_property
from docsgpt.agents.tools.spec_parser import _param_to_property
param = {"description": "x" * 300, "required": False}
prop = _param_to_property(param)
@@ -603,7 +603,7 @@ class TestSpecParserAdditionalCoverage:
# 184-190 (generate_action_name from path), 99 (swagger base URL)
# ---------------------------------------------------------------------------
from application.agents.tools.spec_parser import _extract_actions # noqa: E402
from docsgpt.agents.tools.spec_parser import _extract_actions # noqa: E402
@pytest.mark.unit