kodit 0.4.1__py3-none-any.whl → 0.4.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kodit might be problematic. Click here for more details.
- kodit/_version.py +2 -2
- kodit/app.py +9 -2
- kodit/application/factories/code_indexing_factory.py +62 -13
- kodit/application/factories/reporting_factory.py +32 -0
- kodit/application/services/auto_indexing_service.py +41 -33
- kodit/application/services/code_indexing_application_service.py +137 -138
- kodit/application/services/indexing_worker_service.py +26 -30
- kodit/application/services/queue_service.py +12 -14
- kodit/application/services/reporting.py +104 -0
- kodit/application/services/sync_scheduler.py +21 -20
- kodit/cli.py +71 -85
- kodit/config.py +26 -3
- kodit/database.py +2 -1
- kodit/domain/entities.py +99 -1
- kodit/domain/protocols.py +34 -1
- kodit/domain/services/bm25_service.py +1 -6
- kodit/domain/services/index_service.py +23 -57
- kodit/domain/services/task_status_query_service.py +19 -0
- kodit/domain/value_objects.py +53 -8
- kodit/infrastructure/api/v1/dependencies.py +40 -12
- kodit/infrastructure/api/v1/routers/indexes.py +45 -0
- kodit/infrastructure/api/v1/schemas/task_status.py +39 -0
- kodit/infrastructure/cloning/git/working_copy.py +43 -7
- kodit/infrastructure/embedding/embedding_factory.py +8 -3
- kodit/infrastructure/embedding/embedding_providers/litellm_embedding_provider.py +48 -55
- kodit/infrastructure/enrichment/local_enrichment_provider.py +41 -30
- kodit/infrastructure/git/git_utils.py +3 -2
- kodit/infrastructure/mappers/index_mapper.py +1 -0
- kodit/infrastructure/mappers/task_status_mapper.py +85 -0
- kodit/infrastructure/reporting/__init__.py +1 -0
- kodit/infrastructure/reporting/db_progress.py +23 -0
- kodit/infrastructure/reporting/log_progress.py +37 -0
- kodit/infrastructure/reporting/tdqm_progress.py +38 -0
- kodit/infrastructure/sqlalchemy/embedding_repository.py +47 -68
- kodit/infrastructure/sqlalchemy/entities.py +89 -2
- kodit/infrastructure/sqlalchemy/index_repository.py +274 -236
- kodit/infrastructure/sqlalchemy/task_repository.py +55 -39
- kodit/infrastructure/sqlalchemy/task_status_repository.py +79 -0
- kodit/infrastructure/sqlalchemy/unit_of_work.py +59 -0
- kodit/mcp.py +15 -3
- kodit/migrations/env.py +0 -1
- kodit/migrations/versions/b9cd1c3fd762_add_task_status.py +77 -0
- {kodit-0.4.1.dist-info → kodit-0.4.3.dist-info}/METADATA +1 -1
- {kodit-0.4.1.dist-info → kodit-0.4.3.dist-info}/RECORD +47 -40
- kodit/domain/interfaces.py +0 -27
- kodit/infrastructure/ui/__init__.py +0 -1
- kodit/infrastructure/ui/progress.py +0 -170
- kodit/infrastructure/ui/spinner.py +0 -74
- kodit/reporting.py +0 -78
- {kodit-0.4.1.dist-info → kodit-0.4.3.dist-info}/WHEEL +0 -0
- {kodit-0.4.1.dist-info → kodit-0.4.3.dist-info}/entry_points.txt +0 -0
- {kodit-0.4.1.dist-info → kodit-0.4.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Task repository for the task queue."""
|
|
2
2
|
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
|
|
3
5
|
import structlog
|
|
4
6
|
from sqlalchemy import select
|
|
5
7
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
@@ -9,14 +11,23 @@ from kodit.domain.protocols import TaskRepository
|
|
|
9
11
|
from kodit.domain.value_objects import TaskType
|
|
10
12
|
from kodit.infrastructure.mappers.task_mapper import TaskMapper, TaskTypeMapper
|
|
11
13
|
from kodit.infrastructure.sqlalchemy import entities as db_entities
|
|
14
|
+
from kodit.infrastructure.sqlalchemy.unit_of_work import SqlAlchemyUnitOfWork
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def create_task_repository(
|
|
18
|
+
session_factory: Callable[[], AsyncSession],
|
|
19
|
+
) -> TaskRepository:
|
|
20
|
+
"""Create an index repository."""
|
|
21
|
+
uow = SqlAlchemyUnitOfWork(session_factory=session_factory)
|
|
22
|
+
return SqlAlchemyTaskRepository(uow)
|
|
12
23
|
|
|
13
24
|
|
|
14
25
|
class SqlAlchemyTaskRepository(TaskRepository):
|
|
15
26
|
"""Repository for task persistence using the existing Task entity."""
|
|
16
27
|
|
|
17
|
-
def __init__(self,
|
|
28
|
+
def __init__(self, uow: SqlAlchemyUnitOfWork) -> None:
|
|
18
29
|
"""Initialize the repository."""
|
|
19
|
-
self.
|
|
30
|
+
self.uow = uow
|
|
20
31
|
self.log = structlog.get_logger(__name__)
|
|
21
32
|
|
|
22
33
|
async def add(
|
|
@@ -24,58 +35,63 @@ class SqlAlchemyTaskRepository(TaskRepository):
|
|
|
24
35
|
task: Task,
|
|
25
36
|
) -> None:
|
|
26
37
|
"""Create a new task in the database."""
|
|
27
|
-
self.
|
|
38
|
+
async with self.uow:
|
|
39
|
+
self.uow.session.add(TaskMapper.from_domain_task(task))
|
|
28
40
|
|
|
29
41
|
async def get(self, task_id: str) -> Task | None:
|
|
30
42
|
"""Get a task by ID."""
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
async with self.uow:
|
|
44
|
+
stmt = select(db_entities.Task).where(db_entities.Task.dedup_key == task_id)
|
|
45
|
+
result = await self.uow.session.execute(stmt)
|
|
46
|
+
db_task = result.scalar_one_or_none()
|
|
47
|
+
if not db_task:
|
|
48
|
+
return None
|
|
49
|
+
return TaskMapper.to_domain_task(db_task)
|
|
37
50
|
|
|
38
51
|
async def take(self) -> Task | None:
|
|
39
52
|
"""Take a task for processing and remove it from the database."""
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
async with self.uow:
|
|
54
|
+
stmt = (
|
|
55
|
+
select(db_entities.Task)
|
|
56
|
+
.order_by(db_entities.Task.priority.desc(), db_entities.Task.created_at)
|
|
57
|
+
.limit(1)
|
|
58
|
+
)
|
|
59
|
+
result = await self.uow.session.execute(stmt)
|
|
60
|
+
db_task = result.scalar_one_or_none()
|
|
61
|
+
if not db_task:
|
|
62
|
+
return None
|
|
63
|
+
await self.uow.session.delete(db_task)
|
|
64
|
+
return TaskMapper.to_domain_task(db_task)
|
|
51
65
|
|
|
52
66
|
async def update(self, task: Task) -> None:
|
|
53
67
|
"""Update a task in the database."""
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
68
|
+
async with self.uow:
|
|
69
|
+
stmt = select(db_entities.Task).where(db_entities.Task.dedup_key == task.id)
|
|
70
|
+
result = await self.uow.session.execute(stmt)
|
|
71
|
+
db_task = result.scalar_one_or_none()
|
|
57
72
|
|
|
58
|
-
|
|
59
|
-
|
|
73
|
+
if not db_task:
|
|
74
|
+
raise ValueError(f"Task not found: {task.id}")
|
|
60
75
|
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
db_task.priority = task.priority
|
|
77
|
+
db_task.payload = task.payload
|
|
63
78
|
|
|
64
79
|
async def list(self, task_type: TaskType | None = None) -> list[Task]:
|
|
65
80
|
"""List tasks with optional status filter."""
|
|
66
|
-
|
|
81
|
+
async with self.uow:
|
|
82
|
+
stmt = select(db_entities.Task)
|
|
67
83
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
84
|
+
if task_type:
|
|
85
|
+
stmt = stmt.where(
|
|
86
|
+
db_entities.Task.type == TaskTypeMapper.from_domain_type(task_type)
|
|
87
|
+
)
|
|
72
88
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
89
|
+
stmt = stmt.order_by(
|
|
90
|
+
db_entities.Task.priority.desc(), db_entities.Task.created_at
|
|
91
|
+
)
|
|
76
92
|
|
|
77
|
-
|
|
78
|
-
|
|
93
|
+
result = await self.uow.session.execute(stmt)
|
|
94
|
+
records = result.scalars().all()
|
|
79
95
|
|
|
80
|
-
|
|
81
|
-
|
|
96
|
+
# Convert to domain entities
|
|
97
|
+
return [TaskMapper.to_domain_task(record) for record in records]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Task repository for the task queue."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from sqlalchemy import delete, select
|
|
7
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
8
|
+
|
|
9
|
+
from kodit.domain import entities as domain_entities
|
|
10
|
+
from kodit.domain.protocols import TaskStatusRepository
|
|
11
|
+
from kodit.infrastructure.mappers.task_status_mapper import TaskStatusMapper
|
|
12
|
+
from kodit.infrastructure.sqlalchemy import entities as db_entities
|
|
13
|
+
from kodit.infrastructure.sqlalchemy.unit_of_work import SqlAlchemyUnitOfWork
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def create_task_status_repository(
|
|
17
|
+
session_factory: Callable[[], AsyncSession],
|
|
18
|
+
) -> TaskStatusRepository:
|
|
19
|
+
"""Create an index repository."""
|
|
20
|
+
uow = SqlAlchemyUnitOfWork(session_factory=session_factory)
|
|
21
|
+
return SqlAlchemyTaskStatusRepository(uow)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SqlAlchemyTaskStatusRepository(TaskStatusRepository):
|
|
25
|
+
"""Repository for persisting TaskStatus entities."""
|
|
26
|
+
|
|
27
|
+
def __init__(self, uow: SqlAlchemyUnitOfWork) -> None:
|
|
28
|
+
"""Initialize the repository."""
|
|
29
|
+
self.uow = uow
|
|
30
|
+
self.log = structlog.get_logger(__name__)
|
|
31
|
+
self.mapper = TaskStatusMapper()
|
|
32
|
+
|
|
33
|
+
async def save(self, status: domain_entities.TaskStatus) -> None:
|
|
34
|
+
"""Save a TaskStatus to database."""
|
|
35
|
+
async with self.uow:
|
|
36
|
+
# Convert domain entity to database entity
|
|
37
|
+
db_status = self.mapper.from_domain_task_status(status)
|
|
38
|
+
stmt = select(db_entities.TaskStatus).where(
|
|
39
|
+
db_entities.TaskStatus.id == db_status.id,
|
|
40
|
+
)
|
|
41
|
+
result = await self.uow.session.execute(stmt)
|
|
42
|
+
existing = result.scalar_one_or_none()
|
|
43
|
+
|
|
44
|
+
if not existing:
|
|
45
|
+
self.uow.session.add(db_status)
|
|
46
|
+
else:
|
|
47
|
+
# Update existing record with new values
|
|
48
|
+
existing.operation = db_status.operation
|
|
49
|
+
existing.state = db_status.state
|
|
50
|
+
existing.error = db_status.error
|
|
51
|
+
existing.total = db_status.total
|
|
52
|
+
existing.current = db_status.current
|
|
53
|
+
existing.updated_at = db_status.updated_at
|
|
54
|
+
existing.parent = db_status.parent
|
|
55
|
+
existing.trackable_id = db_status.trackable_id
|
|
56
|
+
existing.trackable_type = db_status.trackable_type
|
|
57
|
+
|
|
58
|
+
async def load_with_hierarchy(
|
|
59
|
+
self, trackable_type: str, trackable_id: int
|
|
60
|
+
) -> list[domain_entities.TaskStatus]:
|
|
61
|
+
"""Load TaskStatus entities with hierarchy from database."""
|
|
62
|
+
async with self.uow:
|
|
63
|
+
stmt = select(db_entities.TaskStatus).where(
|
|
64
|
+
db_entities.TaskStatus.trackable_id == trackable_id,
|
|
65
|
+
db_entities.TaskStatus.trackable_type == trackable_type,
|
|
66
|
+
)
|
|
67
|
+
result = await self.uow.session.execute(stmt)
|
|
68
|
+
db_statuses = list(result.scalars().all())
|
|
69
|
+
|
|
70
|
+
# Use mapper to convert and reconstruct hierarchy
|
|
71
|
+
return self.mapper.to_domain_task_status_with_hierarchy(db_statuses)
|
|
72
|
+
|
|
73
|
+
async def delete(self, status: domain_entities.TaskStatus) -> None:
|
|
74
|
+
"""Delete a TaskStatus."""
|
|
75
|
+
async with self.uow:
|
|
76
|
+
stmt = delete(db_entities.TaskStatus).where(
|
|
77
|
+
db_entities.TaskStatus.id == status.id,
|
|
78
|
+
)
|
|
79
|
+
await self.uow.session.execute(stmt)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""SQLAlchemy implementation of Unit of Work pattern."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from types import TracebackType
|
|
5
|
+
|
|
6
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class SqlAlchemyUnitOfWork:
|
|
10
|
+
"""SQLAlchemy implementation of Unit of Work pattern."""
|
|
11
|
+
|
|
12
|
+
def __init__(self, session_factory: Callable[[], AsyncSession]) -> None:
|
|
13
|
+
"""Initialize the unit of work with a session factory."""
|
|
14
|
+
self._session_factory = session_factory
|
|
15
|
+
self._session: AsyncSession | None = None
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def session(self) -> AsyncSession:
|
|
19
|
+
"""Get the current session."""
|
|
20
|
+
if self._session is None:
|
|
21
|
+
raise RuntimeError("UnitOfWork must be used within async context")
|
|
22
|
+
return self._session
|
|
23
|
+
|
|
24
|
+
async def __aenter__(self) -> "SqlAlchemyUnitOfWork":
|
|
25
|
+
"""Enter the unit of work context."""
|
|
26
|
+
self._session = self._session_factory()
|
|
27
|
+
return self
|
|
28
|
+
|
|
29
|
+
async def __aexit__(
|
|
30
|
+
self,
|
|
31
|
+
exc_type: type[BaseException] | None,
|
|
32
|
+
exc_val: BaseException | None,
|
|
33
|
+
exc_tb: TracebackType | None,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Exit the unit of work context."""
|
|
36
|
+
if self._session:
|
|
37
|
+
if exc_type is not None:
|
|
38
|
+
await self._session.rollback()
|
|
39
|
+
await self._session.commit()
|
|
40
|
+
await self._session.close()
|
|
41
|
+
self._session = None
|
|
42
|
+
|
|
43
|
+
async def commit(self) -> None:
|
|
44
|
+
"""Commit the current transaction."""
|
|
45
|
+
if self._session is None:
|
|
46
|
+
raise RuntimeError("UnitOfWork must be used within async context")
|
|
47
|
+
await self._session.commit()
|
|
48
|
+
|
|
49
|
+
async def rollback(self) -> None:
|
|
50
|
+
"""Rollback the current transaction."""
|
|
51
|
+
if self._session is None:
|
|
52
|
+
raise RuntimeError("UnitOfWork must be used within async context")
|
|
53
|
+
await self._session.rollback()
|
|
54
|
+
|
|
55
|
+
async def flush(self) -> None:
|
|
56
|
+
"""Flush pending changes to the database without committing."""
|
|
57
|
+
if self._session is None:
|
|
58
|
+
raise RuntimeError("UnitOfWork must be used within async context")
|
|
59
|
+
await self._session.flush()
|
kodit/mcp.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""MCP server for kodit."""
|
|
2
2
|
|
|
3
|
-
from collections.abc import AsyncIterator
|
|
3
|
+
from collections.abc import AsyncIterator, Callable
|
|
4
4
|
from contextlib import asynccontextmanager
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from pathlib import Path
|
|
@@ -15,6 +15,7 @@ from kodit._version import version
|
|
|
15
15
|
from kodit.application.factories.code_indexing_factory import (
|
|
16
16
|
create_code_indexing_application_service,
|
|
17
17
|
)
|
|
18
|
+
from kodit.application.factories.reporting_factory import create_server_operation
|
|
18
19
|
from kodit.config import AppContext
|
|
19
20
|
from kodit.database import Database
|
|
20
21
|
from kodit.domain.value_objects import (
|
|
@@ -22,6 +23,9 @@ from kodit.domain.value_objects import (
|
|
|
22
23
|
MultiSearchResult,
|
|
23
24
|
SnippetSearchFilters,
|
|
24
25
|
)
|
|
26
|
+
from kodit.infrastructure.sqlalchemy.task_status_repository import (
|
|
27
|
+
create_task_status_repository,
|
|
28
|
+
)
|
|
25
29
|
|
|
26
30
|
# Global database connection for MCP server
|
|
27
31
|
_mcp_db: Database | None = None
|
|
@@ -32,6 +36,7 @@ class MCPContext:
|
|
|
32
36
|
"""Context for the MCP server."""
|
|
33
37
|
|
|
34
38
|
session: AsyncSession
|
|
39
|
+
session_factory: Callable[[], AsyncSession]
|
|
35
40
|
app_context: AppContext
|
|
36
41
|
|
|
37
42
|
|
|
@@ -55,7 +60,11 @@ async def mcp_lifespan(_: FastMCP) -> AsyncIterator[MCPContext]:
|
|
|
55
60
|
if _mcp_db is None:
|
|
56
61
|
_mcp_db = await app_context.get_db()
|
|
57
62
|
async with _mcp_db.session_factory() as session:
|
|
58
|
-
yield MCPContext(
|
|
63
|
+
yield MCPContext(
|
|
64
|
+
session=session,
|
|
65
|
+
app_context=app_context,
|
|
66
|
+
session_factory=_mcp_db.session_factory,
|
|
67
|
+
)
|
|
59
68
|
|
|
60
69
|
|
|
61
70
|
def create_mcp_server(name: str, instructions: str | None = None) -> FastMCP:
|
|
@@ -173,7 +182,10 @@ def register_mcp_tools(mcp_server: FastMCP) -> None:
|
|
|
173
182
|
# Use the unified application service
|
|
174
183
|
service = create_code_indexing_application_service(
|
|
175
184
|
app_context=mcp_context.app_context,
|
|
176
|
-
|
|
185
|
+
session_factory=mcp_context.session_factory,
|
|
186
|
+
operation=create_server_operation(
|
|
187
|
+
create_task_status_repository(mcp_context.session_factory)
|
|
188
|
+
),
|
|
177
189
|
)
|
|
178
190
|
|
|
179
191
|
log.debug("Searching for snippets")
|
kodit/migrations/env.py
CHANGED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# ruff: noqa
|
|
2
|
+
"""add task status
|
|
3
|
+
|
|
4
|
+
Revision ID: b9cd1c3fd762
|
|
5
|
+
Revises: 9cf0e87de578
|
|
6
|
+
Create Date: 2025-09-05 13:41:29.645898
|
|
7
|
+
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Sequence, Union
|
|
11
|
+
|
|
12
|
+
from alembic import op
|
|
13
|
+
import sqlalchemy as sa
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# revision identifiers, used by Alembic.
|
|
17
|
+
revision: str = "b9cd1c3fd762"
|
|
18
|
+
down_revision: Union[str, None] = "9cf0e87de578"
|
|
19
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def upgrade() -> None:
|
|
24
|
+
"""Upgrade schema."""
|
|
25
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
+
op.create_table(
|
|
27
|
+
"task_status",
|
|
28
|
+
sa.Column("id", sa.String(length=255), nullable=False),
|
|
29
|
+
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
|
|
30
|
+
sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
|
|
31
|
+
sa.Column("operation", sa.String(length=255), nullable=False),
|
|
32
|
+
sa.Column("trackable_id", sa.Integer(), nullable=True),
|
|
33
|
+
sa.Column("trackable_type", sa.String(length=255), nullable=True),
|
|
34
|
+
sa.Column("parent", sa.String(length=255), nullable=True),
|
|
35
|
+
sa.Column("message", sa.UnicodeText(), nullable=False),
|
|
36
|
+
sa.Column("state", sa.String(length=255), nullable=False),
|
|
37
|
+
sa.Column("error", sa.UnicodeText(), nullable=False),
|
|
38
|
+
sa.Column("total", sa.Integer(), nullable=False),
|
|
39
|
+
sa.Column("current", sa.Integer(), nullable=False),
|
|
40
|
+
sa.ForeignKeyConstraint(
|
|
41
|
+
["parent"],
|
|
42
|
+
["task_status.id"],
|
|
43
|
+
),
|
|
44
|
+
sa.PrimaryKeyConstraint("id"),
|
|
45
|
+
)
|
|
46
|
+
op.create_index(op.f("ix_task_status_id"), "task_status", ["id"], unique=False)
|
|
47
|
+
op.create_index(
|
|
48
|
+
op.f("ix_task_status_operation"), "task_status", ["operation"], unique=False
|
|
49
|
+
)
|
|
50
|
+
op.create_index(
|
|
51
|
+
op.f("ix_task_status_parent"), "task_status", ["parent"], unique=False
|
|
52
|
+
)
|
|
53
|
+
op.create_index(
|
|
54
|
+
op.f("ix_task_status_trackable_id"),
|
|
55
|
+
"task_status",
|
|
56
|
+
["trackable_id"],
|
|
57
|
+
unique=False,
|
|
58
|
+
)
|
|
59
|
+
op.create_index(
|
|
60
|
+
op.f("ix_task_status_trackable_type"),
|
|
61
|
+
"task_status",
|
|
62
|
+
["trackable_type"],
|
|
63
|
+
unique=False,
|
|
64
|
+
)
|
|
65
|
+
# ### end Alembic commands ###
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def downgrade() -> None:
|
|
69
|
+
"""Downgrade schema."""
|
|
70
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
71
|
+
op.drop_index(op.f("ix_task_status_trackable_type"), table_name="task_status")
|
|
72
|
+
op.drop_index(op.f("ix_task_status_trackable_id"), table_name="task_status")
|
|
73
|
+
op.drop_index(op.f("ix_task_status_parent"), table_name="task_status")
|
|
74
|
+
op.drop_index(op.f("ix_task_status_operation"), table_name="task_status")
|
|
75
|
+
op.drop_index(op.f("ix_task_status_id"), table_name="task_status")
|
|
76
|
+
op.drop_table("task_status")
|
|
77
|
+
# ### end Alembic commands ###
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
|
|
2
2
|
kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
|
|
3
|
-
kodit/_version.py,sha256=
|
|
4
|
-
kodit/app.py,sha256=
|
|
5
|
-
kodit/cli.py,sha256=
|
|
3
|
+
kodit/_version.py,sha256=bmI9ViMEsJ1Rjce-6ExwiNh2B7sZKTyBkze4k8NsTrU,704
|
|
4
|
+
kodit/app.py,sha256=_AXw_ICyPXkRxXaFPEbeQdSsj5Ybq5z2IEA4XBngXkE,4637
|
|
5
|
+
kodit/cli.py,sha256=1n4pGjnzlZCBhWOJayHo_zFixs1mqkhPP3EosoZRbfE,27385
|
|
6
6
|
kodit/cli_utils.py,sha256=bW4rIm-elrsyM_pSGHh30zV0_oX7V-64pL3YSaBcOt0,2810
|
|
7
|
-
kodit/config.py,sha256=
|
|
8
|
-
kodit/database.py,sha256=
|
|
7
|
+
kodit/config.py,sha256=7q0MR8wKqSeS7_qhswWZPOM0E7aTATvLSW2mkze9CC8,11058
|
|
8
|
+
kodit/database.py,sha256=k93byjVUX1VjAb0hLZxUo4liEKKxAWUBJNw2e7rzaiI,1771
|
|
9
9
|
kodit/log.py,sha256=ZpM0eMo_DVGQqrHxg0VV6dMrN2AAmu_3C0I3G7p2nMw,8828
|
|
10
|
-
kodit/mcp.py,sha256=
|
|
10
|
+
kodit/mcp.py,sha256=5Qvme_dRW4qeK33av8_PfBKGrhaVx3vOVRs6alG2HP4,7708
|
|
11
11
|
kodit/middleware.py,sha256=TiwebNpaEmiP7QRuZrfZcCL51IUefQyNLSPuzVyk8UM,2813
|
|
12
|
-
kodit/reporting.py,sha256=icce1ZyiADsA_Qz-mSjgn2H4SSqKuGfLKnw-yrl9nsg,2722
|
|
13
12
|
kodit/application/__init__.py,sha256=mH50wTpgP9dhbKztFsL8Dda9Hi18TSnMVxXtpp4aGOA,35
|
|
14
13
|
kodit/application/factories/__init__.py,sha256=bU5CvEnaBePZ7JbkCOp1MGTNP752bnU2uEqmfy5FdRk,37
|
|
15
|
-
kodit/application/factories/code_indexing_factory.py,sha256=
|
|
14
|
+
kodit/application/factories/code_indexing_factory.py,sha256=KfQnmJmMI3G9yamg3fd3tK0_taPGnqcscmHMFS9LBLw,7353
|
|
15
|
+
kodit/application/factories/reporting_factory.py,sha256=6zZ6Rjh0WXmO0ehafeAOb2xe36bxnOuMBuIFr7DLgfw,1287
|
|
16
16
|
kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
|
|
17
|
-
kodit/application/services/auto_indexing_service.py,sha256=
|
|
18
|
-
kodit/application/services/code_indexing_application_service.py,sha256=
|
|
19
|
-
kodit/application/services/indexing_worker_service.py,sha256=
|
|
20
|
-
kodit/application/services/queue_service.py,sha256=
|
|
21
|
-
kodit/application/services/
|
|
17
|
+
kodit/application/services/auto_indexing_service.py,sha256=TiA809X9TUTzRsh_uMCqPQZjq_HpznzN-A4ypDJhWAk,3740
|
|
18
|
+
kodit/application/services/code_indexing_application_service.py,sha256=WzxmIsjrkQMeJViGU-v95AaWr5AKfL2vrWL98Jw7h1c,16708
|
|
19
|
+
kodit/application/services/indexing_worker_service.py,sha256=z5fZuUk_iPfcCST0ywPqiEWZaQHhyRbxEGps8e1y2BY,5182
|
|
20
|
+
kodit/application/services/queue_service.py,sha256=G42lR31maFRZ9cSvnWZrzeyb4P1R6yFqrcHWVKAqc9U,1924
|
|
21
|
+
kodit/application/services/reporting.py,sha256=UkDa23ifz9eF8vxrD8L2T4-_sYtMTgKQUfZkiy3SN8s,3598
|
|
22
|
+
kodit/application/services/sync_scheduler.py,sha256=FUUpDtxUh7Eg-lnzOrUHzmSWGpzdpYJQYgPhnQYwTcg,3446
|
|
22
23
|
kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
|
|
23
|
-
kodit/domain/entities.py,sha256=
|
|
24
|
+
kodit/domain/entities.py,sha256=pCvBSLK5hutZtiZ0OAcIW1WBswZNKQBh8BzZeuwGvyk,13353
|
|
24
25
|
kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
|
|
25
|
-
kodit/domain/
|
|
26
|
-
kodit/domain/
|
|
27
|
-
kodit/domain/value_objects.py,sha256=dkfbg99PSCrfj6nJ7tZ2UzDG3QUgNa_Cpj2gLakDM5k,17512
|
|
26
|
+
kodit/domain/protocols.py,sha256=tKl7zzS3k5n4czN7TSwjJp0DauPz_IcZjJN3qgE2d_M,3317
|
|
27
|
+
kodit/domain/value_objects.py,sha256=CQ3qS3g_zYghiY1pYrC6kVngSuJwctFSW3yKdOvVOpQ,18827
|
|
28
28
|
kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX8nzo,42
|
|
29
|
-
kodit/domain/services/bm25_service.py,sha256=
|
|
29
|
+
kodit/domain/services/bm25_service.py,sha256=seRo0V-zW6Uq-Y67j0-zp1xz93gbfQgvlEbpQeYHN1U,3529
|
|
30
30
|
kodit/domain/services/embedding_service.py,sha256=7drYRC2kjg0WJmo06a2E9N0vDnwInUlBB96twjz2BT8,4526
|
|
31
31
|
kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
|
|
32
32
|
kodit/domain/services/index_query_service.py,sha256=cDQkgpJ3JbyeZ3z3GTIqH1JzhhKE_LBIwYE6b-lakwU,2172
|
|
33
|
-
kodit/domain/services/index_service.py,sha256=
|
|
33
|
+
kodit/domain/services/index_service.py,sha256=4iROJC5RGKhf9P3SrvW9jjichGTQRqweVWskYF5ltac,10637
|
|
34
|
+
kodit/domain/services/task_status_query_service.py,sha256=R2YPl42sdt8stUvPmIPxVG5WDcohT0yLESs_i0Y14lI,727
|
|
34
35
|
kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
|
|
35
36
|
kodit/infrastructure/api/__init__.py,sha256=U0TSMPpHrlj1zbAtleuZjU3nXGwudyMe-veNBgvODwM,34
|
|
36
37
|
kodit/infrastructure/api/client/__init__.py,sha256=6RSYqeuxjDe_zTUq48D0F-VfBBUvDmTkO3K3vD61q3I,349
|
|
@@ -42,9 +43,9 @@ kodit/infrastructure/api/client/search_client.py,sha256=f4mM5ZJpAuR7w-i9yASbh4SY
|
|
|
42
43
|
kodit/infrastructure/api/middleware/__init__.py,sha256=6m7eE5k5buboJbuzyX5E9-Tf99yNwFaeJF0f_6HwLyM,30
|
|
43
44
|
kodit/infrastructure/api/middleware/auth.py,sha256=QSnMcMLWvfumqN1iG4ePj2vEZb2Dlsgr-WHptkEkkhE,1064
|
|
44
45
|
kodit/infrastructure/api/v1/__init__.py,sha256=hQ03es21FSgzQlmdP5xWZzK80woIvuYGjiZLwFYuYwk,151
|
|
45
|
-
kodit/infrastructure/api/v1/dependencies.py,sha256=
|
|
46
|
+
kodit/infrastructure/api/v1/dependencies.py,sha256=NPfRXe-Tsj4R4GPSrU1jOp6JTMr3E-0M19xG78pft2I,3457
|
|
46
47
|
kodit/infrastructure/api/v1/routers/__init__.py,sha256=YYyeiuyphIPc-Q_2totF8zfR0BoseOH4ZYFdHP0ed_M,218
|
|
47
|
-
kodit/infrastructure/api/v1/routers/indexes.py,sha256=
|
|
48
|
+
kodit/infrastructure/api/v1/routers/indexes.py,sha256=BslFWHw1DWH8rpm9fWOH1foQl62F22jZ8rNF7YGBIZE,4905
|
|
48
49
|
kodit/infrastructure/api/v1/routers/queue.py,sha256=EZbR-G0qDO9W5ajV_75GRk2pW1Qdgc0ggOwrGKlBE2A,2138
|
|
49
50
|
kodit/infrastructure/api/v1/routers/search.py,sha256=da9YTR6VTzU85_6X3aaZemdTHGCEvcPNeKuMFBgmT_A,2452
|
|
50
51
|
kodit/infrastructure/api/v1/schemas/__init__.py,sha256=_5BVqv4EUi_vvWlAQOE_VfRulUDAF21ZQ7z27y7YOdw,498
|
|
@@ -52,6 +53,7 @@ kodit/infrastructure/api/v1/schemas/context.py,sha256=NlsIn9j1R3se7JkGZivS_CUN4g
|
|
|
52
53
|
kodit/infrastructure/api/v1/schemas/index.py,sha256=NtL09YtO50h-ddpAFxNf-dyxu_Xi5v3yOpKW0W4xsAM,1950
|
|
53
54
|
kodit/infrastructure/api/v1/schemas/queue.py,sha256=oa4wumWOvGzi53Q3cjwIrQJRoentp5nsQSsaj-l-B4U,652
|
|
54
55
|
kodit/infrastructure/api/v1/schemas/search.py,sha256=CWzg5SIMUJ_4yM-ZfgSLWCanMxov6AyGgQQcOMkRlGw,5618
|
|
56
|
+
kodit/infrastructure/api/v1/schemas/task_status.py,sha256=WVB7QdSEg1lKZh_H4sCe-zFdAZA3hCUoxvqCZmhlMXQ,1220
|
|
55
57
|
kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
|
|
56
58
|
kodit/infrastructure/bm25/bm25_factory.py,sha256=I4eo7qRslnyXIRkBf-StZ5ga2Evrr5J5YFocTChFD3g,884
|
|
57
59
|
kodit/infrastructure/bm25/local_bm25_repository.py,sha256=qdDRiiap168XivjkukRHVj1fxlprqRIG0iRSaseLv5I,4695
|
|
@@ -59,45 +61,49 @@ kodit/infrastructure/bm25/vectorchord_bm25_repository.py,sha256=p6ht5K-jlDTvEkmo
|
|
|
59
61
|
kodit/infrastructure/cloning/__init__.py,sha256=IzIvX-yeRRFZ-lfvPVSEe_qXszO6DGQdjKwwDigexyQ,30
|
|
60
62
|
kodit/infrastructure/cloning/metadata.py,sha256=GD2UnCC1oR82RD0SVUqk9CJOqzXPxhOAHVOp7jqN6Qc,3571
|
|
61
63
|
kodit/infrastructure/cloning/git/__init__.py,sha256=20ePcp0qE6BuLsjsv4KYB1DzKhMIMsPXwEqIEZtjTJs,34
|
|
62
|
-
kodit/infrastructure/cloning/git/working_copy.py,sha256
|
|
64
|
+
kodit/infrastructure/cloning/git/working_copy.py,sha256=-DPHW9YZ-wyCC-etkIurFurW-Ef-xIJfa05TCPAD4tc,3909
|
|
63
65
|
kodit/infrastructure/embedding/__init__.py,sha256=F-8nLlWAerYJ0MOIA4tbXHLan8bW5rRR84vzxx6tRKI,39
|
|
64
|
-
kodit/infrastructure/embedding/embedding_factory.py,sha256=
|
|
66
|
+
kodit/infrastructure/embedding/embedding_factory.py,sha256=BNhrrYQAkcnXkuuQy-Q-lwJhyoGONsTsbgN4t0UdGeY,3395
|
|
65
67
|
kodit/infrastructure/embedding/local_vector_search_repository.py,sha256=ExweyNEL5cP-g3eDhGqZSih7zhdOrop2WdFPPJL-tB4,3505
|
|
66
68
|
kodit/infrastructure/embedding/vectorchord_vector_search_repository.py,sha256=PIoU0HsDlaoXDXnGjOR0LAkAcW4JiE3ymJy_SBhEopc,8030
|
|
67
69
|
kodit/infrastructure/embedding/embedding_providers/__init__.py,sha256=qeZ-oAIAxMl5QqebGtO1lq-tHjl_ucAwOXePklcwwGk,34
|
|
68
70
|
kodit/infrastructure/embedding/embedding_providers/batching.py,sha256=a8CL9PX2VLmbeg616fc_lQzfC4BWTVn32m4SEhXpHxc,3279
|
|
69
71
|
kodit/infrastructure/embedding/embedding_providers/hash_embedding_provider.py,sha256=V6OdCuWyQQOvo3OJGRi-gBKDApIcrELydFg7T696P5s,2257
|
|
70
|
-
kodit/infrastructure/embedding/embedding_providers/litellm_embedding_provider.py,sha256=
|
|
72
|
+
kodit/infrastructure/embedding/embedding_providers/litellm_embedding_provider.py,sha256=9Q5he_MI8xXENODwCvYCbhVawTjTv1bArGQrmxoWLas,5297
|
|
71
73
|
kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py,sha256=9aLV1Zg4KMhYWlGRwgAUtswW4aIabNqbsipWhAn64RI,4133
|
|
72
74
|
kodit/infrastructure/enrichment/__init__.py,sha256=8acZKNzql8Fs0lceFu9U3KoUrOptRBtVIxr_Iw6lz3Y,40
|
|
73
75
|
kodit/infrastructure/enrichment/enrichment_factory.py,sha256=NFGY6u9SJ_GOgiB_RtotbQmte0kGFQUymwzZCbbsx34,1530
|
|
74
76
|
kodit/infrastructure/enrichment/litellm_enrichment_provider.py,sha256=AM4-4KApDndzWzQzzKAedy21iGMhkwylR5VCmV9K-uI,6040
|
|
75
|
-
kodit/infrastructure/enrichment/local_enrichment_provider.py,sha256=
|
|
77
|
+
kodit/infrastructure/enrichment/local_enrichment_provider.py,sha256=6WVVt5Nlq8mDGSRCOTjjVPMDCUyMgW-cxCzZv3WfP7k,4589
|
|
76
78
|
kodit/infrastructure/enrichment/null_enrichment_provider.py,sha256=DhZkJBnkvXg_XSAs-oKiFnKqYFPnmTl3ikdxrqeEfbc,713
|
|
77
79
|
kodit/infrastructure/enrichment/utils.py,sha256=FE9UCuxxzSdoHrmAC8Si2b5D6Nf6kVqgM1yjUVyCvW0,930
|
|
78
80
|
kodit/infrastructure/git/__init__.py,sha256=0iMosFzudj4_xNIMe2SRbV6l5bWqkjnUsZoFsoZFuM8,33
|
|
79
|
-
kodit/infrastructure/git/git_utils.py,sha256=
|
|
81
|
+
kodit/infrastructure/git/git_utils.py,sha256=5lH94AcF7Hac4h6kBzo_B9pzC1S6AK2-Dy13gz--Zf0,781
|
|
80
82
|
kodit/infrastructure/ignore/__init__.py,sha256=VzFv8XOzHmsu0MEGnWVSF6KsgqLBmvHlRqAkT1Xb1MY,36
|
|
81
83
|
kodit/infrastructure/ignore/ignore_pattern_provider.py,sha256=zdxun3GodLfXxyssBK8QDUK58xb4fBJ0SKcHUyn3pzM,2131
|
|
82
84
|
kodit/infrastructure/indexing/__init__.py,sha256=7UPRa2jwCAsa0Orsp6PqXSF8iIXJVzXHMFmrKkI9yH8,38
|
|
83
85
|
kodit/infrastructure/indexing/fusion_service.py,sha256=2B0guBsuKz19uWcs18sIJpUJPzXoRvULgl7UNWQGysA,1809
|
|
84
86
|
kodit/infrastructure/mappers/__init__.py,sha256=QPHOjNreXmBPPovZ6elnYFS0vD-IsmrGl4TT01FCKro,77
|
|
85
|
-
kodit/infrastructure/mappers/index_mapper.py,sha256=
|
|
87
|
+
kodit/infrastructure/mappers/index_mapper.py,sha256=XWtv_him2Sd9dR-Jy_ndy9jYXVtv3LttzmmUGzNK6CE,12825
|
|
86
88
|
kodit/infrastructure/mappers/task_mapper.py,sha256=QW7uL8rji6QJ7RRdHwbvkWqmwDcUDGTYPLwbwiKlViY,2919
|
|
89
|
+
kodit/infrastructure/mappers/task_status_mapper.py,sha256=5lo_jS2EKYg4czOOAFmrWfQl3OojIokwpzhaR3b1wE0,3433
|
|
90
|
+
kodit/infrastructure/reporting/__init__.py,sha256=4Qu38YbDOaeDqLdT_CbK8tOZHTKGrHRXncVKlGRzOeQ,32
|
|
91
|
+
kodit/infrastructure/reporting/db_progress.py,sha256=VVaCKjC_UFwdRptXbBroG9qhXCxI4bZmElf1PMsBzWA,819
|
|
92
|
+
kodit/infrastructure/reporting/log_progress.py,sha256=dXy-xwIFLBnVTDPJd_h6e9iszmpQHvUUXAiVMLkOCWQ,1202
|
|
93
|
+
kodit/infrastructure/reporting/tdqm_progress.py,sha256=-7ZrxTcb1L1tNiBGb5W_HKQ_uBNyMdeuelS3ZW3Wl3E,1288
|
|
87
94
|
kodit/infrastructure/slicing/__init__.py,sha256=x7cjvHA9Ay2weUYE_dpdAaPaStp20M-4U2b5MLgT5KM,37
|
|
88
95
|
kodit/infrastructure/slicing/language_detection_service.py,sha256=JGJXrq9bLyfnisWJXeP7y1jbZMmKAISdPBlRBCosUcE,684
|
|
89
96
|
kodit/infrastructure/slicing/slicer.py,sha256=GOqJykd00waOTO1WJHyE5KUgJ2RLx2rOQ7M7T_u5LLg,35600
|
|
90
97
|
kodit/infrastructure/sqlalchemy/__init__.py,sha256=UXPMSF_hgWaqr86cawRVqM8XdVNumQyyK5B8B97GnlA,33
|
|
91
|
-
kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=
|
|
92
|
-
kodit/infrastructure/sqlalchemy/entities.py,sha256=
|
|
93
|
-
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=
|
|
94
|
-
kodit/infrastructure/sqlalchemy/task_repository.py,sha256=
|
|
95
|
-
kodit/infrastructure/
|
|
96
|
-
kodit/infrastructure/
|
|
97
|
-
kodit/infrastructure/ui/spinner.py,sha256=GcP115qtR0VEnGfMEtsGoAUpRzVGUSfiUXfoJJERngA,2357
|
|
98
|
+
kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=YYxbUEdzDdlKdy0FyAP4EzhJMAIdEnNZiXT6hzPHk9I,7731
|
|
99
|
+
kodit/infrastructure/sqlalchemy/entities.py,sha256=QTtLlWFeFH8R3y4RWPESXk5IYMlVwAAAaJJsmg5OacY,9978
|
|
100
|
+
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=x8MPl0j7GrW_lEZh464EZyb0w935p_EHv2NIMNxjJu0,25680
|
|
101
|
+
kodit/infrastructure/sqlalchemy/task_repository.py,sha256=60ECbxiXC2_UR80f4uPSmJiP_so7PTBzZG_w1WXSiuE,3546
|
|
102
|
+
kodit/infrastructure/sqlalchemy/task_status_repository.py,sha256=xZm4j7V0NUD3OFj4o1Mwv1K8ngSoqWKlgFBgrVlWBxo,3283
|
|
103
|
+
kodit/infrastructure/sqlalchemy/unit_of_work.py,sha256=gK-C8yk2HYBrAEDrblWxBrldrGb83SBHn-8lURkFeMg,2093
|
|
98
104
|
kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
|
|
99
105
|
kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
|
|
100
|
-
kodit/migrations/env.py,sha256=
|
|
106
|
+
kodit/migrations/env.py,sha256=asxYDVHeIPjM43SkF6b0raVOe-xKykyJTtjxXiSj4Bo,2364
|
|
101
107
|
kodit/migrations/script.py.mako,sha256=zWziKtiwYKEWuwPV_HBNHwa9LCT45_bi01-uSNFaOOE,703
|
|
102
108
|
kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py,sha256=c8dMcKQ-BBBr_2-92eJZFS3Fwe3__B2eNqvQeMZHs0w,917
|
|
103
109
|
kodit/migrations/versions/4552eb3f23ce_add_summary.py,sha256=WjyBQzFK8IXuvta15YBE23yaTMM1rZCXvPxW98MStng,870
|
|
@@ -106,13 +112,14 @@ kodit/migrations/versions/85155663351e_initial.py,sha256=h8DWmSxVwTtWlmWNH8-S4Ax
|
|
|
106
112
|
kodit/migrations/versions/9cf0e87de578_add_queue.py,sha256=FYrco38f3_-1ZRfGOU617bgR1Ta0YTwwz3QDQMw_NKY,1600
|
|
107
113
|
kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPYdaJDgjW6VsV-GhaLnPnK_fpI,3884
|
|
108
114
|
kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
|
|
115
|
+
kodit/migrations/versions/b9cd1c3fd762_add_task_status.py,sha256=7cgdMKu4OBidL0ER8AGgyerfSfEk1I3XHo6Kh0sCzIQ,2754
|
|
109
116
|
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=r7ukmJ_axXLAWewYx-F1fEmZ4JbtFd37i7cSb0tq3y0,1722
|
|
110
117
|
kodit/utils/__init__.py,sha256=DPEB1i8evnLF4Ns3huuAYg-0pKBFKUFuiDzOKG9r-sw,33
|
|
111
118
|
kodit/utils/dump_openapi.py,sha256=29VdjHpNSaGAg7RjQw0meq1OLhljCx1ElgBlTC8xoF4,1247
|
|
112
119
|
kodit/utils/generate_api_paths.py,sha256=TMtx9v55podDfUmiWaHgJHLtEWLV2sLL-5ejGFMPzAo,3569
|
|
113
120
|
kodit/utils/path_utils.py,sha256=thK6YGGNvQThdBaCYCCeCvS1L8x-lwl3AoGht2jnjGw,1645
|
|
114
|
-
kodit-0.4.
|
|
115
|
-
kodit-0.4.
|
|
116
|
-
kodit-0.4.
|
|
117
|
-
kodit-0.4.
|
|
118
|
-
kodit-0.4.
|
|
121
|
+
kodit-0.4.3.dist-info/METADATA,sha256=HGyP_rA98DrqrsLJWOvUmRkbmRrrYd-p9czPjiF38aI,7702
|
|
122
|
+
kodit-0.4.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
123
|
+
kodit-0.4.3.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
|
|
124
|
+
kodit-0.4.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
125
|
+
kodit-0.4.3.dist-info/RECORD,,
|
kodit/domain/interfaces.py
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"""Domain interfaces."""
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
|
|
5
|
-
from kodit.domain.value_objects import ProgressEvent
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class ProgressCallback(ABC):
|
|
9
|
-
"""Abstract interface for progress callbacks."""
|
|
10
|
-
|
|
11
|
-
@abstractmethod
|
|
12
|
-
async def on_progress(self, event: ProgressEvent) -> None:
|
|
13
|
-
"""On progress hook."""
|
|
14
|
-
|
|
15
|
-
@abstractmethod
|
|
16
|
-
async def on_complete(self, operation: str) -> None:
|
|
17
|
-
"""On complete hook."""
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class NullProgressCallback(ProgressCallback):
|
|
21
|
-
"""Null implementation of progress callback that does nothing."""
|
|
22
|
-
|
|
23
|
-
async def on_progress(self, event: ProgressEvent) -> None:
|
|
24
|
-
"""Do nothing on progress."""
|
|
25
|
-
|
|
26
|
-
async def on_complete(self, operation: str) -> None:
|
|
27
|
-
"""Do nothing on complete."""
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""UI infrastructure module."""
|