Skip to main content

Unified SDK for Fortinet products (FortiOS, FortiManager, FortiAnalyzer)

Project description

HFortix

Complete Python SDK for Fortinet Products - Modular, type-safe, production-ready.

PyPI version Python 3.10+

⚠️ BETA STATUS - Version 0.5.132 (January 21, 2026)

Status: Production-ready but in beta until v1.0 with comprehensive unit tests.

Version: 0.5.132 Status: Beta (100% auto-generated, production-ready)

Overview

HFortix is a modular Python SDK that provides comprehensive, production-ready clients for Fortinet products. Starting with FortiOS/FortiGate, with future support planned for FortiManager, FortiAnalyzer, and more.

Version 0.5.32 features major improvements to object response mode, auto-normalization for list fields, and enhanced IDE support with 15,000+ parameters having enum autocomplete.

This is a meta-package that provides convenient installation patterns for the HFortix ecosystem.

Installation

Minimal Installation (Core Only)

pip install hfortix

Installs only hfortix-core - the shared foundation (exceptions, HTTP client, type definitions).

FortiOS/FortiGate Support

pip install hfortix[fortios]

Installs hfortix-core + hfortix-fortios - Everything needed for FortiGate/FortiOS.

Complete Installation

pip install hfortix[all]

Installs all current and future Fortinet product packages.

Individual Packages

You can also install product packages directly:

# Just FortiOS (includes core automatically)
pip install hfortix-fortios

# Just the core framework
pip install hfortix-core

Quick Start

FortiOS/FortiGate

from hfortix_fortios import FortiOS

# Connect to FortiGate
fgt = FortiOS(
    host="192.168.1.99",
    token="your-api-token",
    verify=False
)

# Get system status (Monitor endpoint - GET)
status = fgt.api.monitor.system.status.get()
print(f"Hostname: {status.hostname}")
print(f"Version: {status.version}")

# Create a firewall address (CMDB endpoint - POST)
fgt.api.cmdb.firewall.address.post(
    name="web-server",
    subnet="192.168.1.100 255.255.255.255",
    comment="Production web server"
)

# Update an existing address (CMDB endpoint - PUT)
fgt.api.cmdb.firewall.address.put(
    name="web-server",
    subnet="192.168.1.101 255.255.255.255"
)

# Delete an address (CMDB endpoint - DELETE)
fgt.api.cmdb.firewall.address.delete(name="web-server")

FortiManager Proxy

Route FortiOS API calls through FortiManager to managed devices:

from hfortix_fortios import FortiManagerProxy

# Connect to FortiManager
fmg = FortiManagerProxy(
    host="fortimanager.example.com",
    username="admin",
    password="password",
    adom="root",
    verify=False
)

# Get a proxied FortiOS connection to a managed device
fgt = fmg.get_device("fw01")

# Use the same API as direct FortiOS!
addresses = fgt.api.cmdb.firewall.address.get()
fgt.api.cmdb.firewall.address.post(
    name="Server-01",
    subnet="10.0.1.10 255.255.255.255"
)

# Clean up
fmg.logout()

Package Structure

HFortix uses a modular architecture:

hfortix (meta-package)
├── hfortix-core          # Shared foundation
│   ├── Exception system (403+ error codes)
│   ├── HTTP client framework (sync & async)
│   ├── fmt module (13 formatting utilities)
│   ├── Type definitions (TypedDict, Protocols)
│   └── Debug utilities
│
└── hfortix-fortios       # FortiOS/FortiGate client
    ├── Complete API coverage (1,348 endpoints)
    ├── 2,129 endpoint files with type stubs
    ├── Auto-generated validators
    └── FortiObject response wrapper

Future Packages:

  • hfortix-fortimanager - FortiManager API client
  • hfortix-fortianalyzer - FortiAnalyzer API client
  • hfortix-fortiswitch - FortiSwitch API client
  • And more...

Key Features

🎯 Modular Design

Install only what you need:

  • Minimal footprint with hfortix-core
  • Product-specific packages when needed
  • Shared infrastructure across all products

⚡ Complete FortiOS Support

API Coverage (FortiOS 7.6.5 - Schema v1.7.0):

  • 1,348 total endpoints (100% auto-generated)
  • 561 CMDB endpoints (configuration management)
  • 490 Monitor endpoints (real-time data)
  • 286 Log endpoints (disk, memory, FortiAnalyzer, FortiCloud)
  • 11 Service endpoints (sniffer, security rating, system)

Features:

  • Complete .pyi type stubs (2,129 files) for perfect IDE autocomplete
  • Schema-based validation for all parameters
  • Auto-generated tests for all endpoints
  • Automatic key normalization (hyphens → underscores)

🏢 Enterprise Features

  • Async/Await Support: Full async implementation with context managers
  • Error Handling: 403+ specific error codes with comprehensive exception hierarchy
  • HTTP/2 Support: Connection multiplexing for better performance
  • Automatic Retry: Handles transient failures intelligently
  • Circuit Breaker: Prevents cascade failures with automatic recovery
  • Type Safety: Full type hints with IDE autocomplete
  • Read-Only Mode: Safe testing without accidental changes
  • Operation Tracking: Audit logging for all API calls
  • Performance Testing: Built-in tools to optimize device communication
  • Formatting Utilities: fmt module with 13 data conversion functions

Import Patterns

Recommended (New in v0.4.0-dev1)

# Product packages
from hfortix_fortios import FortiOS

# Core exceptions
from hfortix_core import (
    APIError,
    ResourceNotFoundError,
    DuplicateEntryError
)

Legacy (Still Supported)

from hfortix import FortiOS
from hfortix.FortiOS import FortiOS

Migration from v0.4.x

Changes in v0.5.0:

  • Direct API access via fgt.api.cmdb.*, fgt.api.monitor.*, fgt.api.log.*

Old (v0.4.x):

from hfortix_fortios.firewall import FirewallAddress
addr = FirewallAddress(fgt)
result = addr.create(name="test", subnet="10.0.0.1/32")

New (v0.5.0+):

# Uses standard REST methods: .get(), .post(), .put(), .delete()
result = fgt.api.cmdb.firewall.address.post(
    name="test",
    subnet="10.0.0.1 255.255.255.255"
)

All endpoints use REST verbs (.get(), .post(), .put(), .delete()) and return FortiObject with attribute access.

Documentation

Getting Started:

Convenience Wrappers:

Advanced Topics:

Project Info:

Requirements

  • Python 3.10+
  • FortiOS 7.0+ (tested with 7.6.5)

Development Status

Beta - All APIs are functional and tested against live Fortinet devices. The package remains in beta status until version 1.0.0 with comprehensive unit test coverage.

Current Test Coverage:

  • 226 test files for FortiOS
  • 75%+ pass rate
  • ~50% of endpoints have dedicated tests
  • All implementations validated against FortiOS 7.6.5

Why Modular?

Benefits of the split package architecture:

  1. Smaller Dependencies: Install only what you need
  2. Faster Updates: Product packages can be updated independently
  3. Better Organization: Clear separation of concerns
  4. Easier Maintenance: Focused development per product
  5. Future Flexibility: Easy to add new Fortinet products

Version History

  • v0.4.0-dev1 (Current): Package split - modular architecture
  • v0.3.39: Convenience wrappers (services, schedules, shaping, IP/MAC binding)
  • v0.3.38: Firewall policy wrapper with 150+ parameters
  • v0.3.x: Async support, error handling, performance tools
  • v0.1.x-v0.2.x: Initial FortiOS API implementation

License

Proprietary - See LICENSE file

Support

Author

Herman W. Jacobsen

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

hfortix-0.5.145.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hfortix-0.5.145-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file hfortix-0.5.145.tar.gz.

File metadata

  • Download URL: hfortix-0.5.145.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for hfortix-0.5.145.tar.gz
Algorithm Hash digest
SHA256 2823d4e5d2927c9619d3ca5fd9f785e2039c74f465ddccfcf8ff9ef005ee272d
MD5 e18be5733a52b9b3c17e48a3e31037cc
BLAKE2b-256 ff6d6efa6e1546ea58c4e8af1dd55dbc46d7c45e985ca12a1854b21dc2406244

See more details on using hashes here.

File details

Details for the file hfortix-0.5.145-py3-none-any.whl.

File metadata

  • Download URL: hfortix-0.5.145-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for hfortix-0.5.145-py3-none-any.whl
Algorithm Hash digest
SHA256 6304b4e1edfa7c66c5f5971345ddcbdc15365450db5a5e2b05067b3b4aaee9e2
MD5 62cafacd50e81aefcb82545de9d98146
BLAKE2b-256 6a19074a590b654ce8e91842f979e7bb43ddf3ab50e6faa2faf5360787ac278c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page