docs: Add pre-commit formatting and linting requirements to CLAUDE.md
- Add explicit instructions to always run formatting before commits - Include both make commands and direct uv commands - Emphasize this is a required step, not optional - Place in Development Guidelines section for visibility This ensures all code contributions maintain consistent style and quality. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f1536faff8
commit
c834c7b52d
7 changed files with 57 additions and 15 deletions
17
CLAUDE.md
17
CLAUDE.md
|
|
@ -118,6 +118,23 @@ docker-compose up
|
|||
- Type checking with Pyright is enforced
|
||||
- Main project uses `typeCheckingMode = "basic"`, server uses `typeCheckingMode = "standard"`
|
||||
|
||||
### Pre-Commit Requirements
|
||||
|
||||
**IMPORTANT:** Always format and lint code before committing:
|
||||
|
||||
```bash
|
||||
# Format code (required before commit)
|
||||
make format # or: uv run ruff format
|
||||
|
||||
# Lint code (required before commit)
|
||||
make lint # or: uv run ruff check --fix && uv run pyright
|
||||
|
||||
# Run all checks (format + lint + test)
|
||||
make check
|
||||
```
|
||||
|
||||
**Never commit code without running these commands first.** This ensures code quality and consistency across the codebase.
|
||||
|
||||
### Testing Requirements
|
||||
|
||||
- Run tests with `make test` or `pytest`
|
||||
|
|
|
|||
|
|
@ -605,9 +605,7 @@ async def node_fulltext_search(
|
|||
+ (group_ids[0].replace('-', '') if group_ids is not None else '')
|
||||
)
|
||||
query = (
|
||||
get_nodes_query(
|
||||
index_name, '$query', limit=limit, provider=driver.provider
|
||||
)
|
||||
get_nodes_query(index_name, '$query', limit=limit, provider=driver.provider)
|
||||
+ yield_query
|
||||
+ filter_query
|
||||
+ """
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ class DatabaseDriverFactory:
|
|||
|
||||
uri = os.environ.get('FALKORDB_URI', falkor_config.uri)
|
||||
password = os.environ.get('FALKORDB_PASSWORD', falkor_config.password)
|
||||
|
||||
|
||||
# Parse the URI to extract host and port
|
||||
parsed = urlparse(uri)
|
||||
host = parsed.hostname or 'localhost'
|
||||
|
|
|
|||
|
|
@ -97,3 +97,8 @@ docstring-code-format = true
|
|||
include = ["graphiti_core"]
|
||||
pythonVersion = "3.10"
|
||||
typeCheckingMode = "basic"
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"pyright>=1.1.404",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -116,9 +116,7 @@ def mock_cross_encoder_client():
|
|||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_add_bulk(
|
||||
graph_driver, mock_llm_client, mock_embedder, mock_cross_encoder_client
|
||||
):
|
||||
async def test_add_bulk(graph_driver, mock_llm_client, mock_embedder, mock_cross_encoder_client):
|
||||
if graph_driver.provider == GraphProvider.FALKORDB:
|
||||
pytest.skip('Skipping as test fails on FalkorDB')
|
||||
|
||||
|
|
@ -143,7 +141,7 @@ async def test_add_bulk(
|
|||
source_description='conversation message',
|
||||
content='Alice likes Bob',
|
||||
valid_at=now,
|
||||
entity_edges=[], # Filled in later
|
||||
entity_edges=[], # Filled in later
|
||||
)
|
||||
episode_node_2 = EpisodicNode(
|
||||
name='test_episode_2',
|
||||
|
|
@ -154,7 +152,7 @@ async def test_add_bulk(
|
|||
source_description='conversation message',
|
||||
content='Bob adores Alice',
|
||||
valid_at=now,
|
||||
entity_edges=[], # Filled in later
|
||||
entity_edges=[], # Filled in later
|
||||
)
|
||||
|
||||
# Create entity nodes
|
||||
|
|
@ -269,8 +267,22 @@ async def test_add_bulk(
|
|||
mock_embedder,
|
||||
)
|
||||
|
||||
node_ids = [episode_node_1.uuid, episode_node_2.uuid, entity_node_1.uuid, entity_node_2.uuid, entity_node_3.uuid, entity_node_4.uuid]
|
||||
edge_ids = [episodic_edge_1.uuid, episodic_edge_2.uuid, episodic_edge_3.uuid, episodic_edge_4.uuid, entity_edge_1.uuid, entity_edge_2.uuid]
|
||||
node_ids = [
|
||||
episode_node_1.uuid,
|
||||
episode_node_2.uuid,
|
||||
entity_node_1.uuid,
|
||||
entity_node_2.uuid,
|
||||
entity_node_3.uuid,
|
||||
entity_node_4.uuid,
|
||||
]
|
||||
edge_ids = [
|
||||
episodic_edge_1.uuid,
|
||||
episodic_edge_2.uuid,
|
||||
episodic_edge_3.uuid,
|
||||
episodic_edge_4.uuid,
|
||||
entity_edge_1.uuid,
|
||||
entity_edge_2.uuid,
|
||||
]
|
||||
node_count = await get_node_count(graph_driver, node_ids)
|
||||
assert node_count == len(node_ids)
|
||||
edge_count = await get_edge_count(graph_driver, edge_ids)
|
||||
|
|
@ -290,7 +302,6 @@ async def test_add_bulk(
|
|||
retrieved_entity_node = await EntityNode.get_by_uuid(graph_driver, entity_node_2.uuid)
|
||||
await assert_entity_node_equals(graph_driver, retrieved_entity_node, entity_node_2)
|
||||
|
||||
|
||||
retrieved_entity_node = await EntityNode.get_by_uuid(graph_driver, entity_node_3.uuid)
|
||||
await assert_entity_node_equals(graph_driver, retrieved_entity_node, entity_node_3)
|
||||
|
||||
|
|
@ -317,6 +328,7 @@ async def test_add_bulk(
|
|||
retrieved_entity_edge = await EntityEdge.get_by_uuid(graph_driver, entity_edge_2.uuid)
|
||||
await assert_entity_edge_equals(graph_driver, retrieved_entity_edge, entity_edge_2)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_remove_episode(
|
||||
graph_driver, mock_llm_client, mock_embedder, mock_cross_encoder_client
|
||||
|
|
@ -342,7 +354,7 @@ async def test_remove_episode(
|
|||
source_description='conversation message',
|
||||
content='Alice likes Bob',
|
||||
valid_at=now,
|
||||
entity_edges=[], # Filled in later
|
||||
entity_edges=[], # Filled in later
|
||||
)
|
||||
|
||||
# Create entity nodes
|
||||
|
|
|
|||
|
|
@ -103,7 +103,9 @@ async def test_entity_node(sample_entity_node, graph_driver):
|
|||
await assert_entity_node_equals(graph_driver, retrieved[0], sample_entity_node)
|
||||
|
||||
# Get node by group ids
|
||||
retrieved = await EntityNode.get_by_group_ids(graph_driver, [group_id], limit=2, with_embeddings=True)
|
||||
retrieved = await EntityNode.get_by_group_ids(
|
||||
graph_driver, [group_id], limit=2, with_embeddings=True
|
||||
)
|
||||
assert len(retrieved) == 1
|
||||
await assert_entity_node_equals(graph_driver, retrieved[0], sample_entity_node)
|
||||
|
||||
|
|
|
|||
10
uv.lock
generated
10
uv.lock
generated
|
|
@ -600,7 +600,7 @@ name = "exceptiongroup"
|
|||
version = "1.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
||||
{ name = "typing-extensions", marker = "python_full_version < '3.12'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 }
|
||||
wheels = [
|
||||
|
|
@ -869,6 +869,11 @@ voyageai = [
|
|||
{ name = "voyageai" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyright" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "anthropic", marker = "extra == 'anthropic'", specifier = ">=0.49.0" },
|
||||
|
|
@ -913,6 +918,9 @@ requires-dist = [
|
|||
{ name = "voyageai", marker = "extra == 'voyageai'", specifier = ">=0.2.3" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [{ name = "pyright", specifier = ">=1.1.404" }]
|
||||
|
||||
[[package]]
|
||||
name = "groq"
|
||||
version = "0.31.0"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue