nlp2sql 0.2.0rc11__tar.gz → 0.2.0rc12__tar.gz
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.
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/PKG-INFO +1 -1
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/pyproject.toml +1 -1
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/__init__.py +1 -1
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/openai_embedding_adapter.py +10 -7
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/uv.lock +1 -1
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/commands/db.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/commands/quality.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/commands/test.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/rules/adapters.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/rules/architecture.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/rules/python-style.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/rules/testing.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.claude/settings.json +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.github/workflows/ci.yml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.github/workflows/publish-pypi.yml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.github/workflows/publish-testpypi.yml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.gitignore +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.mcp.json.example +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/.python-version +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/CLAUDE.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/CONTRIBUTING.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/LICENSE +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/SECURITY.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/assets/nlp2sql-logo.png +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/benchmarks/enterprise_benchmark_results.json +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/.env.example +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/docker-compose.yml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/get-db-urls.sh +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/init-schema.sql +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/large-schema.sql +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/localstack-init.sh +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docker/test-redshift.sh +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docs/API.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docs/ARCHITECTURE.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docs/CONFIGURATION.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docs/ENTERPRISE.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/docs/Redshift.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/advanced/test_multiple_providers.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/advanced/test_simple_api.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/database_specific/test_odoo_integration.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/default_examples.json +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/documentation/real_world_example.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/getting_started/basic_usage.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/getting_started/simple_demo.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/getting_started/test_api_setup.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/schema_management/test_auto_schema.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/schema_management/test_schema_filters_comprehensive.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/.dockerignore +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/.env.example +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/DOCKER_README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/DOCKER_SETUP.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/DOCKER_TESTING_SUMMARY.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/Dockerfile +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/INDEX.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/docker/init-ecommerce-schema.sql +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/docker-compose.yml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/main.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/pyproject.toml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/test-docker-endpoints.sh +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/install-dev.sh +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/mcp_server/README.md +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/mcp_server/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/mcp_server/example_config.json +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/mcp_server/pyproject.toml +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/mcp_server/server.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/anthropic_adapter.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/gemini_adapter.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/local_embedding_adapter.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/openai_adapter.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/postgres_repository.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/redshift_adapter.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/adapters/regex_query_validator.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/cli.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/client.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/config/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/config/settings.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/database_prompts.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/entities.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/provider_config.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/result.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/sql_keywords.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/core/sql_safety.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/exceptions/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/factories/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/factories/repository_factory.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/ai_provider.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/cache.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/embedding_provider.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/example_repository.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/query_optimizer.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/query_safety.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/query_validator.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/schema_repository.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/ports/schema_strategy.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/analyzer.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/embedding_manager.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/example_loader.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/example_store.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/schema/manager.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/services/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/services/query_service.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/utils/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/utils/helpers.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/src/nlp2sql/utils/storage.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/test_tmp/.gitignore +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/conftest.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/mcp/__init__.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/mcp/test_sql_security.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_basic.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_batch_scoring.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_column_validation.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_database_prompts.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_dsl_integration.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_embedding_manager.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_integration.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_postgres_integration.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_redshift_integration.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_repository_cache.py +0 -0
- {nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/tests/test_repository_factory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nlp2sql
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.0rc12
|
|
4
4
|
Summary: Enterprise-ready Natural Language to SQL converter with multi-provider support. Built for production scale (1000+ tables) with Clean Architecture.
|
|
5
5
|
Project-URL: Homepage, https://github.com/luiscarbonel1991/nlp2sql
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/luiscarbonel1991/nlp2sql/issues
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "nlp2sql"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.0rc12"
|
|
4
4
|
description = "Enterprise-ready Natural Language to SQL converter with multi-provider support. Built for production scale (1000+ tables) with Clean Architecture."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "MIT"}
|
|
@@ -20,7 +20,7 @@ from .ports.schema_repository import SchemaRepositoryPort
|
|
|
20
20
|
from .schema.example_store import ExampleStore
|
|
21
21
|
from .services.query_service import QueryGenerationService
|
|
22
22
|
|
|
23
|
-
__version__ = "0.2.
|
|
23
|
+
__version__ = "0.2.0rc12"
|
|
24
24
|
__author__ = "Luis Carbonel"
|
|
25
25
|
__email__ = "devhighlevel@gmail.com"
|
|
26
26
|
|
|
@@ -79,17 +79,19 @@ class OpenAIEmbeddingAdapter(EmbeddingProviderPort):
|
|
|
79
79
|
processed_texts.append(text)
|
|
80
80
|
|
|
81
81
|
try:
|
|
82
|
-
|
|
82
|
+
# OpenAI API limits input array to 2048 items per request
|
|
83
|
+
batch_size = 2000
|
|
84
|
+
all_embeddings: list[list[float]] = []
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
for i in range(0, len(processed_texts), batch_size):
|
|
87
|
+
batch = processed_texts[i : i + batch_size]
|
|
88
|
+
response = await self.client.embeddings.create(model=self.model, input=batch)
|
|
89
|
+
all_embeddings.extend(item.embedding for item in response.data)
|
|
90
|
+
|
|
91
|
+
embeddings_array = np.array(all_embeddings)
|
|
87
92
|
|
|
88
93
|
# Normalize embeddings for cosine similarity with FAISS IndexFlatIP
|
|
89
|
-
# This is critical: FAISS IndexFlatIP uses inner product which only works
|
|
90
|
-
# as cosine similarity when vectors are normalized to unit length
|
|
91
94
|
norms = np.linalg.norm(embeddings_array, axis=1, keepdims=True)
|
|
92
|
-
# Avoid division by zero (though rare for real embeddings)
|
|
93
95
|
norms = np.where(norms == 0, 1, norms)
|
|
94
96
|
normalized_embeddings = embeddings_array / norms
|
|
95
97
|
|
|
@@ -97,6 +99,7 @@ class OpenAIEmbeddingAdapter(EmbeddingProviderPort):
|
|
|
97
99
|
"OpenAI embeddings generated and normalized",
|
|
98
100
|
model=self.model,
|
|
99
101
|
texts_count=len(processed_texts),
|
|
102
|
+
batches=((len(processed_texts) - 1) // batch_size) + 1,
|
|
100
103
|
dimension=normalized_embeddings.shape[1],
|
|
101
104
|
)
|
|
102
105
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/DOCKER_TESTING_SUMMARY.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nlp2sql-0.2.0rc11 → nlp2sql-0.2.0rc12}/examples/strands-fastapi-agent/test-docker-endpoints.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|