cloudkit 0.1.0__tar.gz → 0.1.2__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.
Files changed (32) hide show
  1. cloudkit-0.1.2/.devcontainer/devcontainer.json +54 -0
  2. cloudkit-0.1.2/.dockerignore +94 -0
  3. cloudkit-0.1.2/.github/dependabot.yml +12 -0
  4. cloudkit-0.1.2/.pre-commit-config.yaml +29 -0
  5. cloudkit-0.1.2/.pypirc +6 -0
  6. cloudkit-0.1.2/.python-version +1 -0
  7. cloudkit-0.1.2/.vscode/launch.json +45 -0
  8. cloudkit-0.1.2/.vscode/settings.json +38 -0
  9. cloudkit-0.1.2/.whitesource +3 -0
  10. cloudkit-0.1.2/CHANGELOG.md +52 -0
  11. cloudkit-0.1.2/Dockerfile +80 -0
  12. cloudkit-0.1.2/Makefile +75 -0
  13. {cloudkit-0.1.0 → cloudkit-0.1.2}/PKG-INFO +20 -31
  14. {cloudkit-0.1.0 → cloudkit-0.1.2}/README.md +19 -30
  15. cloudkit-0.1.2/config +4 -0
  16. cloudkit-0.1.2/env.template +43 -0
  17. cloudkit-0.1.2/examples/example_usage.py +291 -0
  18. {cloudkit-0.1.0 → cloudkit-0.1.2}/pyproject.toml +3 -3
  19. cloudkit-0.1.2/setup.py +9 -0
  20. cloudkit-0.1.2/tests/__init__.py +0 -0
  21. cloudkit-0.1.2/tests/test_cloudkit_usage.py +100 -0
  22. cloudkit-0.1.2/tests/test_import.py +75 -0
  23. cloudkit-0.1.2/tests/test_provider.py +189 -0
  24. cloudkit-0.1.2/uv.lock +1763 -0
  25. {cloudkit-0.1.0 → cloudkit-0.1.2}/.gitignore +0 -0
  26. {cloudkit-0.1.0 → cloudkit-0.1.2}/LICENSE +0 -0
  27. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/__init__.py +0 -0
  28. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/aws.py +0 -0
  29. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/azure.py +0 -0
  30. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/config.py +0 -0
  31. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/interfaces.py +0 -0
  32. {cloudkit-0.1.0/cloudabstractor → cloudkit-0.1.2/src/cloudkit}/provider.py +0 -0
@@ -0,0 +1,54 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2
+ // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
3
+ {
4
+ "name": "Catalyst Backend Boilerplate",
5
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6
+ "image": "mcr.microsoft.com/devcontainers/base:ubuntu-22.04",
7
+
8
+ // Features to add to the dev container. More info: https://containers.dev/features.
9
+ "features": {
10
+ "ghcr.io/devcontainers/features/azure-cli:1": {},
11
+ "ghcr.io/azure/azure-dev/azd:0": {},
12
+ "ghcr.io/va-h/devcontainers-features/uv:1": {},
13
+ "ghcr.io/devcontainers-contrib/features/ruff:1": {}
14
+ // "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {},
15
+ // "ghcr.io/devcontainers/features/nvidia-cuda:1": {}
16
+ },
17
+
18
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
19
+ // "forwardPorts": [],
20
+
21
+ // Use 'postCreateCommand' to run commands after the container is created.
22
+ // "postCreateCommand": "uname -a",
23
+
24
+ // Configure tool-specific properties.
25
+ "customizations": {
26
+ "vscode": {
27
+ "extensions": [
28
+ "ms-azuretools.azure-dev",
29
+ "ms-azuretools.vscode-bicep",
30
+ "ms-python.python"
31
+ ]
32
+ },
33
+ "codespaces": {
34
+ "openFiles": [
35
+ "README.md"
36
+ ]
37
+ }
38
+ },
39
+
40
+ // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
41
+ // "remoteUser": "root"
42
+
43
+ "runArgs": ["--userns=keep-id:uid=1000,gid=1000"],
44
+ "containerUser": "vscode",
45
+ "updateRemoteUserUID": true,
46
+ "containerEnv": {
47
+ "HOME": "/home/vscode"
48
+ },
49
+
50
+ "hostRequirements": {
51
+ "memory": "8gb"
52
+ // "gpu": "optional"
53
+ }
54
+ }
@@ -0,0 +1,94 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ env/
12
+ venv/
13
+ ENV/
14
+ env.bak/
15
+ venv.bak/
16
+ *.egg
17
+ *.egg-info/
18
+ dist/
19
+ build/
20
+ *.whl
21
+
22
+ # PyInstaller
23
+ # Usually these files are written by a python script from a template
24
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
25
+ *.manifest
26
+ *.spec
27
+
28
+ # Installer logs
29
+ pip-log.txt
30
+ pip-delete-this-directory.txt
31
+
32
+ # Unit test / coverage reports
33
+ htmlcov/
34
+ .tox/
35
+ .nox/
36
+ .coverage
37
+ .coverage.*
38
+ .cache
39
+ nosetests.xml
40
+ coverage.xml
41
+ *.cover
42
+ *.py,cover
43
+ .hypothesis/
44
+ .pytest_cache/
45
+
46
+ # Translations
47
+ *.mo
48
+ *.pot
49
+
50
+ # Django stuff:
51
+ *.log
52
+ local_settings.py
53
+ db.sqlite3
54
+
55
+ # Flask stuff:
56
+ instance/
57
+ .webassets-cache
58
+
59
+ # Scrapy stuff:
60
+ .scrapy
61
+
62
+ # Sphinx documentation
63
+ docs/_build/
64
+
65
+ # PyBuilder
66
+ target/
67
+
68
+ # Jupyter Notebook
69
+ .ipynb_checkpoints
70
+
71
+ # IPython
72
+ profile_default/
73
+ ipython_config.py
74
+
75
+ # pyenv
76
+ .python-version
77
+
78
+ # celery beat schedule file
79
+ celerybeat-schedule
80
+
81
+ # SageMath parsed files
82
+ *.sage.py
83
+
84
+ # Environments
85
+ .env
86
+ .env.*
87
+
88
+ # mypy
89
+ .mypy_cache/
90
+ .dmypy.json
91
+ dmypy.json
92
+
93
+ # Pyre type checker
94
+ .pyre/
@@ -0,0 +1,12 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for more information:
4
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+ # https://containers.dev/guide/dependabot
6
+
7
+ version: 2
8
+ updates:
9
+ - package-ecosystem: "devcontainers"
10
+ directory: "/"
11
+ schedule:
12
+ interval: weekly
@@ -0,0 +1,29 @@
1
+ # See https://pre-commit.com for more information
2
+ # See https://pre-commit.com/hooks.html for more hooks
3
+ default_language_version:
4
+ python: python3.11
5
+ repos:
6
+ - repo: https://github.com/pre-commit/pre-commit-hooks
7
+ rev: v4.4.0
8
+ hooks:
9
+ - id: check-added-large-files
10
+ - id: check-toml
11
+ - id: check-yaml
12
+ args:
13
+ - --unsafe
14
+ - id: end-of-file-fixer
15
+ - id: trailing-whitespace
16
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
17
+ rev: v0.2.0
18
+ hooks:
19
+ - id: ruff
20
+ args:
21
+ - --fix
22
+ - id: ruff-format
23
+ - repo: https://github.com/astral-sh/uv-pre-commit
24
+ rev: 0.6.2
25
+ hooks:
26
+ - id: uv-lock
27
+ ci:
28
+ autofix_commit_msg: 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks
29
+ autoupdate_commit_msg: ⬆ [pre-commit.ci] pre-commit autoupdate
cloudkit-0.1.2/.pypirc ADDED
@@ -0,0 +1,6 @@
1
+ [distutils]
2
+ Index-servers =
3
+ aiis4aa-feed
4
+
5
+ [aiis4aa-feed]
6
+ Repository = https://pkgs.dev.azure.com/Consulting-DTT-AI-Integration-Services/aiis/_packaging/aiis4aa-feed/pypi/upload/
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,45 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "Python: Debug Current File",
9
+ "type": "debugpy",
10
+ "request": "launch",
11
+ "program": "${file}",
12
+ "console": "integratedTerminal",
13
+ "justMyCode": true,
14
+ "env": {
15
+ "PYTHONPATH": "${workspaceFolder}/src"
16
+ }
17
+ },
18
+ {
19
+ "name": "Python: Run Examples",
20
+ "type": "debugpy",
21
+ "request": "launch",
22
+ "program": "${workspaceFolder}/examples/example_usage.py",
23
+ "console": "integratedTerminal",
24
+ "justMyCode": true,
25
+ "env": {
26
+ "PYTHONPATH": "${workspaceFolder}/src"
27
+ }
28
+ },
29
+ {
30
+ "name": "Python: Run Tests",
31
+ "type": "debugpy",
32
+ "request": "launch",
33
+ "module": "pytest",
34
+ "args": [
35
+ "tests/",
36
+ "-v"
37
+ ],
38
+ "console": "integratedTerminal",
39
+ "justMyCode": true,
40
+ "env": {
41
+ "PYTHONPATH": "${workspaceFolder}/src"
42
+ }
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "[python]": {
3
+ "editor.defaultFormatter": "charliermarsh.ruff"
4
+ },
5
+ "[markdown]": {
6
+ "editor.wordWrap": "on",
7
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
8
+ },
9
+ "[yaml]": {
10
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
11
+ },
12
+ "[html]": {
13
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
14
+ },
15
+ "[json]": {
16
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
17
+ },
18
+ "[jsonc]": {
19
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
20
+ },
21
+ "[javascript]": {
22
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
23
+ },
24
+ "[dockerfile]": {
25
+ "editor.defaultFormatter": "ms-azuretools.vscode-docker"
26
+ },
27
+ "editor.tabSize": 4,
28
+ "editor.insertSpaces": true,
29
+ "editor.renderWhitespace": "all",
30
+ "editor.formatOnSave": true,
31
+ "editor.rulers": [88, 120],
32
+ "files.insertFinalNewline": true,
33
+ "files.trimFinalNewlines": true,
34
+ "files.trimTrailingWhitespace": true,
35
+ "python.testing.pytestArgs": ["tests"],
36
+ "python.testing.unittestEnabled": false,
37
+ "python.testing.pytestEnabled": true
38
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "settingsInheritedFrom": "whitesource-config/whitesource-config@master"
3
+ }
@@ -0,0 +1,52 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.1] - 2026-02-04
9
+
10
+ ### Changed
11
+ - Updated README with correct package name and PyPI installation instructions
12
+ - Updated documentation with proper import statements
13
+
14
+ ### Fixed
15
+ - Fixed connection string formatting in .env template
16
+
17
+ ## [0.1.0] - 2026-02-04
18
+
19
+ ### Added
20
+ - Initial release of CloudKit
21
+ - Cloud abstraction layer supporting Azure and AWS
22
+ - Database services:
23
+ - Azure Cosmos DB (NoSQL and Table API)
24
+ - Azure Blob Storage
25
+ - AWS DynamoDB
26
+ - AWS S3
27
+ - AI services:
28
+ - Text analysis (sentiment, entity recognition, key phrase extraction)
29
+ - Chat completion via Azure OpenAI and AWS Bedrock
30
+ - Text embeddings generation
31
+ - Vector similarity search
32
+ - Search services:
33
+ - Azure Cognitive Search integration
34
+ - AWS OpenSearch integration
35
+ - Messaging services:
36
+ - Azure Service Bus support
37
+ - AWS SQS support
38
+ - Unified `CloudProvider` interface for all services
39
+ - Configuration via environment variables or dictionaries
40
+ - Async/await support for all operations
41
+ - Comprehensive examples and documentation
42
+ - Type hints throughout the codebase
43
+ - Testing framework with pytest
44
+ - Development tooling (ruff, mypy, pre-commit)
45
+
46
+ ### Infrastructure
47
+ - Modern Python packaging with pyproject.toml
48
+ - Published to PyPI as `cloudkit`
49
+ - MIT License
50
+ - Python 3.11+ support
51
+
52
+ [0.1.0]: https://github.com/sleepeatai/cloudkit/releases/tag/v0.1.0
@@ -0,0 +1,80 @@
1
+ # Agentic Composer SDK - Development and Testing Container
2
+ FROM python:3.11-slim AS base
3
+
4
+ WORKDIR /app
5
+
6
+ # Install system dependencies required for various Python packages and development
7
+ RUN apt-get update && apt-get install -y --no-install-recommends \
8
+ build-essential \
9
+ curl \
10
+ git \
11
+ && rm -rf /var/lib/apt/lists/*
12
+
13
+ # Install UV for dependency management
14
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh
15
+
16
+ # Add UV to PATH
17
+ ENV PATH="/root/.local/bin:$PATH" \
18
+ PYTHONUNBUFFERED=1 \
19
+ PYTHONPATH=/app
20
+
21
+ # Development stage
22
+ FROM base AS development
23
+
24
+ # Create virtual environment
25
+ RUN uv venv .venv
26
+ ENV PATH="/app/.venv/bin:$PATH" \
27
+ VIRTUAL_ENV="/app/.venv"
28
+
29
+ # Copy project configuration files
30
+ COPY pyproject.toml .
31
+ COPY uv.lock .
32
+
33
+ # Install dependencies from lockfile
34
+ RUN uv sync --group dev --locked
35
+
36
+ # Copy source code and other files
37
+ COPY src/ src/
38
+ COPY tests/ tests/
39
+ COPY examples/ examples/
40
+ COPY README.md .
41
+ COPY Makefile .
42
+ COPY env.template .
43
+
44
+ # Default command for development
45
+ CMD ["bash"]
46
+
47
+ # Testing stage
48
+ FROM development AS testing
49
+
50
+ # Run tests by default
51
+ CMD ["make", "test"]
52
+
53
+ # Examples stage - for running examples
54
+ FROM development AS examples
55
+
56
+ # Set working directory to examples
57
+ WORKDIR /app/examples
58
+
59
+ # Run examples by default
60
+ CMD ["python", "example_usage.py"]
61
+
62
+ # Production stage - minimal SDK installation
63
+ FROM base AS production
64
+
65
+ # Create virtual environment
66
+ RUN uv venv .venv
67
+ ENV PATH="/app/.venv/bin:$PATH" \
68
+ VIRTUAL_ENV="/app/.venv"
69
+
70
+ # Copy only what's needed for production use
71
+ COPY pyproject.toml .
72
+ COPY uv.lock .
73
+ COPY src/ src/
74
+ COPY README.md .
75
+
76
+ # Install only production dependencies from lockfile
77
+ RUN uv sync --locked
78
+
79
+ # Default to Python shell for SDK usage
80
+ CMD ["python"]
@@ -0,0 +1,75 @@
1
+ # Agentic Composer SDK - Development Makefile
2
+
3
+ .PHONY: help install install-dev test lint format clean docs publish
4
+
5
+ help: ## Show this help message
6
+ @echo "Agentic Composer SDK - Available commands:"
7
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
8
+
9
+ lock: ## Generate or update uv.lock file
10
+ uv lock
11
+
12
+ install: ## Install the SDK in development mode
13
+ uv venv .venv
14
+ source .venv/bin/activate && uv sync --locked
15
+
16
+ install-dev: ## Install SDK with development dependencies
17
+ uv sync --group dev --locked
18
+
19
+ test: ## Run tests with coverage
20
+ uv run pytest tests/ -v --cov=src --cov-report=html --cov-report=term
21
+
22
+ test-fast: ## Run tests without coverage (faster)
23
+ uv run pytest tests/ -v
24
+
25
+ lint: ## Run linting with ruff
26
+ uv run ruff check src/ tests/ examples/
27
+
28
+ lint-fix: ## Run linting with auto-fix
29
+ uv run ruff check --fix src/ tests/ examples/
30
+
31
+ format: ## Format code with ruff
32
+ uv run ruff format src/ tests/ examples/
33
+
34
+ format-check: ## Check if code is properly formatted
35
+ uv run ruff format --check src/ tests/ examples/
36
+
37
+ type-check: ## Run type checking with mypy
38
+ uv run mypy src/
39
+
40
+ clean: ## Clean up cache and build artifacts
41
+ find . -type d -name "__pycache__" -exec rm -rf {} +
42
+ find . -type d -name "*.egg-info" -exec rm -rf {} +
43
+ find . -type d -name ".pytest_cache" -exec rm -rf {} +
44
+ find . -type d -name ".mypy_cache" -exec rm -rf {} +
45
+ find . -type d -name ".ruff_cache" -exec rm -rf {} +
46
+ rm -rf build/ dist/ htmlcov/
47
+
48
+ examples: ## Run the example usage script
49
+ cd examples && uv run python example_usage.py
50
+
51
+ docs: ## Generate documentation (placeholder)
52
+ @echo "Documentation generation not yet implemented"
53
+
54
+ pre-commit: ## Run pre-commit checks (lint, format, type-check, test)
55
+ make format-check
56
+ make lint
57
+ make type-check
58
+ make test-fast
59
+
60
+ build: ## Build the package
61
+ uv build
62
+
63
+ publish-test: ## Publish to test PyPI
64
+ uv publish --repository-url https://test.pypi.org/legacy/
65
+
66
+ publish: ## Publish to PyPI
67
+ uv publish
68
+
69
+ # Development workflow
70
+ dev-setup: install-dev ## Complete development setup
71
+ @echo "Development environment ready!"
72
+ @echo "Run 'make help' to see available commands"
73
+
74
+ check-all: pre-commit ## Run all quality checks
75
+ @echo "All quality checks passed!"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudkit
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Python cloud abstraction SDK for databases and AI services on Azure and AWS
5
5
  Author-email: sleepeatai <sleepeatai@gmail.com>
6
6
  License: MIT
@@ -33,7 +33,11 @@ Requires-Dist: pydantic>=2.10.6
33
33
  Requires-Dist: pyyaml>=6.0.2
34
34
  Description-Content-Type: text/markdown
35
35
 
36
- # Agentic Composer SDK
36
+ # CloudKit
37
+
38
+ [![PyPI version](https://badge.fury.io/py/cloudkit.svg)](https://badge.fury.io/py/cloudkit)
39
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
40
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
37
41
 
38
42
  A Python cloud abstraction SDK that provides a unified interface for databases and AI services across Azure and AWS. This SDK allows you to build cloud-agnostic microservices that can easily switch between cloud providers without changing your application code.
39
43
 
@@ -55,36 +59,25 @@ A Python cloud abstraction SDK that provides a unified interface for databases a
55
59
 
56
60
  ## Installation
57
61
 
58
- 1. Install required tools:
59
- ```bash
60
- python3 -m pip install keyring artifacts-keyring
61
- ```
62
+ Install from PyPI:
62
63
 
63
- 2. Configure Azure Artifacts authentication:
64
64
  ```bash
65
- keyring set artifacts.dev.azure.com Consulting-DTT-AI-Integration-Services <your-PAT>
65
+ pip install cloudkit
66
66
  ```
67
67
 
68
- 3. Install the package:
69
- ```bash
70
- python3 -m pip install cloudabstractor
71
- ```
68
+ Or install from source:
72
69
 
73
70
  ```bash
74
- # Install from source
75
- git clone <repository-url>
76
- cd agentic-composer-sdk
71
+ git clone https://github.com/sleepeatai/cloudkit.git
72
+ cd cloudkit
77
73
  pip install -e .
78
-
79
- # Or install from PyPI (once published)
80
- pip install agentic-composer-sdk
81
74
  ```
82
75
 
83
76
  ## Quick Start
84
77
 
85
78
  ```python
86
79
  import asyncio
87
- from agentic_composer_sdk import CloudProvider
80
+ from cloudkit import CloudProvider
88
81
 
89
82
  async def main():
90
83
  # Initialize for Azure
@@ -153,7 +146,7 @@ export CLOUD_SDK_AWS__AWS_REGION=us-east-1
153
146
  ### Configuration Dictionary
154
147
 
155
148
  ```python
156
- from agentic_composer_sdk import CloudProvider
149
+ from cloudkit import CloudProvider
157
150
 
158
151
  # Azure configuration
159
152
  azure_config = {
@@ -286,7 +279,7 @@ Here's how to integrate the SDK into a microservice:
286
279
 
287
280
  ```python
288
281
  from fastapi import FastAPI
289
- from agentic_composer_sdk import CloudProvider
282
+ from cloudkit import CloudProvider
290
283
 
291
284
  app = FastAPI()
292
285
 
@@ -363,9 +356,6 @@ chat_response = await bedrock_chat.chat_completion(
363
356
  ## Testing
364
357
 
365
358
  ```bash
366
- # Install test dependencies
367
- pip install -e ".[test]"
368
-
369
359
  # Run tests
370
360
  pytest tests/
371
361
 
@@ -376,18 +366,17 @@ pytest --cov=src tests/
376
366
  ## Development
377
367
 
378
368
  ```bash
379
- # Install development dependencies
380
- pip install -e ".[dev]"
381
-
382
369
  # Format code
383
- black src/ tests/
384
- isort src/ tests/
370
+ ruff format src/ tests/
371
+
372
+ # Lint code
373
+ ruff check src/ tests/
385
374
 
386
375
  # Type checking
387
376
  mypy src/
388
377
 
389
- # Linting
390
- flake8 src/ tests/
378
+ # Run tests
379
+ pytest tests/
391
380
  ```
392
381
 
393
382
  ## Contributing