AI-powered Odoo addon quality analyzer
Project description
AI-powered quality analysis tool for Odoo addons.
Overview
Qualidoo CLI is a command-line tool for analyzing Odoo addon quality. It uploads your addon to qualidoo.aidooit.com for analysis and displays results directly in your terminal.
Features:
- Analyze addons from any directory
- View results with detailed findings and recommendations
- Save analysis results as JSON for CI/CD integration
- Progress feedback during analysis
Installation
pip install qualidoo
Quick Start
# 1. Configure your API key (get it from https://qualidoo.aidooit.com/settings)
qualidoo login
# 2. Analyze an addon
cd /path/to/my_addon
qualidoo check
# Or specify a path
qualidoo check /path/to/my_addon
Authentication
The CLI requires an API key from your Qualidoo account. API access is available on PRO, TEAM, and BETA tiers.
Getting an API Key
- Visit https://qualidoo.aidooit.com/settings
- Generate a new API key (format:
qdoo_xxxxxxxxxxxx) - Run
qualidoo loginand enter your key
Configuring the API Key
Option 1: Interactive login (recommended)
qualidoo login
You'll be prompted to enter your API key securely.
Option 2: Command-line flag
qualidoo login --key qdoo_your_api_key_here
Option 3: Environment variable
export QUALIDOO_API_KEY=qdoo_your_api_key_here
qualidoo check
The environment variable takes precedence over the stored configuration.
Commands
qualidoo login
Configure API key for authentication.
qualidoo login # Interactive prompt
qualidoo login --key qdoo_xxx # Provide key directly
qualidoo login -k qdoo_xxx # Short form
The API key is validated against the server before saving.
qualidoo logout
Remove stored API key.
qualidoo logout
qualidoo whoami
Show current authentication status and user information.
qualidoo whoami
Displays your email, current tier, and API usage information.
qualidoo check
Analyze an Odoo addon for quality issues.
qualidoo check [PATH] [OPTIONS]
Arguments:
| Argument | Description |
|---|---|
PATH |
Path to the Odoo addon directory (defaults to current directory) |
Options:
| Option | Short | Description |
|---|---|---|
--verbose |
-v |
Show detailed findings with file paths and suggestions |
--save FILE |
-s |
Save full JSON result to file |
--timeout SECONDS |
-t |
Maximum time to wait for analysis (default: 300) |
Examples:
# Analyze current directory
qualidoo check
# Analyze specific addon
qualidoo check /path/to/sale_extension
# Show detailed output
qualidoo check --verbose
# Save results for CI/CD
qualidoo check --save result.json
# Combine options
qualidoo check /path/to/addon -v -s analysis.json -t 600
Output:
The check command displays:
- Overall score (0-100) and grade
- Summary of findings by severity (CRITICAL, MAJOR, MINOR, INFO)
- Per-agent scores
- Top recommendations
With --verbose, it also shows:
- Each finding with file path and line number
- Detailed descriptions
- Improvement suggestions
qualidoo config
View current configuration.
qualidoo config
qualidoo config --show # Explicit show flag
qualidoo config -s # Short form
Displays the configuration file path and current settings (API key is masked).
Configuration
Config File Location
Configuration is stored in:
~/.qualidoo/config.toml
The file is created with secure permissions (readable only by owner).
Configuration Format
api_key = "qdoo_your_api_key_here"
Environment Variables
| Variable | Description |
|---|---|
QUALIDOO_API_KEY |
API key (overrides config file) |
QUALIDOO_API_URL |
API URL (default: https://qualidoo.aidooit.com) |
CI/CD Integration
Use the CLI in your CI/CD pipeline to enforce quality standards:
# GitHub Actions example
- name: Install Qualidoo CLI
run: pip install qualidoo
- name: Analyze addon
env:
QUALIDOO_API_KEY: ${{ secrets.QUALIDOO_API_KEY }}
run: |
qualidoo check ./my_addon --save result.json
# Parse result.json and fail if score < threshold
Error Handling
Common Errors
| Error | Cause | Solution |
|---|---|---|
| "Not logged in" | No API key configured | Run qualidoo login |
| "Invalid API key" | Key is incorrect or expired | Get a new key from settings page |
| "Authentication failed" | API key no longer valid | Run qualidoo login to reconfigure |
| "Rate limit exceeded" | Too many API requests | Wait and try again later |
| "Not a valid Odoo addon" | Missing __manifest__.py |
Ensure path points to valid addon |
| "Analysis timed out" | Server processing took too long | Increase --timeout or try again |
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Error (authentication, API, or validation failure) |
Requirements
- Python 3.10+
- PRO, TEAM, or BETA tier for API access (FREE tier has no API access)
Development
Setting Up the Development Environment
Clone the repository and install with development dependencies:
git clone https://github.com/aidooit/qualidoo.git
cd qualidoo-cli
pip install -e ".[dev]"
Running Tests
The test suite uses pytest with respx for HTTP mocking. To run all tests:
# Run all tests with verbose output
pytest -v
# Run tests for a specific module
pytest tests/test_config.py -v
pytest tests/test_api_client.py -v
pytest tests/test_output.py -v
pytest tests/test_cli.py -v
# Run a specific test class
pytest tests/test_cli.py::TestCheckCommand -v
# Run a specific test
pytest tests/test_config.py::TestValidateApiKeyFormat::test_valid_key -v
# Run tests with coverage (requires pytest-cov)
pytest --cov=qualidoo --cov-report=term-missing
Test Structure
tests/
├── __init__.py
├── conftest.py # Shared fixtures (mock data, temp directories)
├── test_config.py # Configuration module tests (~22 tests)
├── test_api_client.py # API client tests (~34 tests)
├── test_output.py # Output formatting tests (~25 tests)
└── test_cli.py # CLI command tests (~21 tests)
Test Coverage
The test suite covers:
- Configuration (
test_config.py): API key validation, config file operations, environment variable handling - API Client (
test_api_client.py): HTTP requests, error handling, file uploads, job polling - Output (
test_output.py): Grade calculations, terminal formatting, progress callbacks - CLI (
test_cli.py): All commands (login, logout, whoami, check, config) with various scenarios
Dev Dependencies
| Package | Purpose |
|---|---|
pytest>=8.0.0 |
Test framework |
respx>=0.21.0 |
HTTP mocking for httpx |
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qualidoo-0.2.0.tar.gz.
File metadata
- Download URL: qualidoo-0.2.0.tar.gz
- Upload date:
- Size: 261.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1421554867784dd160faa8b0f4e655fb011eb27319026ffcee555bf92087f7c1
|
|
| MD5 |
937c0c210fc283589a2bfb6103f23cd4
|
|
| BLAKE2b-256 |
a7bcc1affcd811a4f8ff1723fd8a4b4fd90b3bc275cdf383aa3e482b7da8b8d8
|
Provenance
The following attestation bundles were made for qualidoo-0.2.0.tar.gz:
Publisher:
python-publish.yml on aidooit/qualidoo-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qualidoo-0.2.0.tar.gz -
Subject digest:
1421554867784dd160faa8b0f4e655fb011eb27319026ffcee555bf92087f7c1 - Sigstore transparency entry: 976360187
- Sigstore integration time:
-
Permalink:
aidooit/qualidoo-cli@ee14aaabbfda3d702e7c0c87c7f83a09e78b6033 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/aidooit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ee14aaabbfda3d702e7c0c87c7f83a09e78b6033 -
Trigger Event:
release
-
Statement type:
File details
Details for the file qualidoo-0.2.0-py3-none-any.whl.
File metadata
- Download URL: qualidoo-0.2.0-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdc3ce17a29d377053e5a4dab3462f43a1b64399909d2ae3a6e05795f882a138
|
|
| MD5 |
fa5bb153905b1ccb8ae3b4571559b8b8
|
|
| BLAKE2b-256 |
5ea59c4632ec806a8ad671706aa21fd88c5a1d0cde68985e42f855821d04a4dc
|
Provenance
The following attestation bundles were made for qualidoo-0.2.0-py3-none-any.whl:
Publisher:
python-publish.yml on aidooit/qualidoo-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qualidoo-0.2.0-py3-none-any.whl -
Subject digest:
bdc3ce17a29d377053e5a4dab3462f43a1b64399909d2ae3a6e05795f882a138 - Sigstore transparency entry: 976360188
- Sigstore integration time:
-
Permalink:
aidooit/qualidoo-cli@ee14aaabbfda3d702e7c0c87c7f83a09e78b6033 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/aidooit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@ee14aaabbfda3d702e7c0c87c7f83a09e78b6033 -
Trigger Event:
release
-
Statement type: