Skip to main content

Python client for rftools.io — 203 RF & electronics calculators

Project description

rftools

PyPI Python

Python client for rftools.io — 203 RF & electronics calculators accessible from Python and the command line.

Installation

pip install rftools-io

Quick Start (free tier)

No API key needed. Free tier: 5 calls/day per IP.

import rftools

result = rftools.calculate("vswr-return-loss", {"vswr": 2.5})
print(result["returnLoss"])  # 9.54 dB
print(result.values)         # {"returnLoss": 9.54, "reflectionCoeff": 0.333, ...}

Authenticated Usage (API tier)

Get an API key at rftools.io/pricing ($19/mo, 10,000 calls/month).

import rftools

client = rftools.Client(api_key="rfc_live_xxx")
# or set environment variable: export RFTOOLS_API_KEY=rfc_live_xxx

result = client.calculate("free-space-path-loss", {"frequency": 2400, "distance": 100})
print(result["pathLoss"])  # dB

Batch Calculations

Run up to 50 calculations in a single HTTP request (API tier only):

results = client.batch([
    ("vswr-return-loss", {"vswr": 1.5}),
    ("vswr-return-loss", {"vswr": 2.0}),
    ("free-space-path-loss", {"frequency": 2400, "distance": 50}),
])
for r in results:
    if r.ok:
        print(r.values)
    else:
        print(f"Error: {r.error}")

Typed Category Stubs

IDE-friendly typed functions with parameter defaults matching the web UI:

from rftools.calculators import rf, pcb, antenna, power

# RF
result = rf.vswr_return_loss(vswr=2.5)
result = rf.free_space_path_loss(frequency=2400.0, distance=100.0)

# Antenna
result = antenna.dipole_antenna(frequency=433.0)
result = antenna.parabolic_dish_antenna(frequency=10000.0, diameter=0.6)

# PCB
result = pcb.trace_width_current(current=2.0, tempRise=10.0, thickness=1.0)

# Power
result = power.voltage_divider(vin=12.0, r1=10000.0, r2=10000.0)

All 13 categories available: rf, pcb, power, signal, antenna, general, motor, protocol, emc, thermal, sensor, unit_conversion, audio.

CLI

# Run a calculation
rftools calc vswr-return-loss --vswr 2.5

# With API key
RFTOOLS_API_KEY=rfc_xxx rftools calc free-space-path-loss --frequency 2400 --distance 100

# JSON output (pipe to jq)
rftools calc vswr-return-loss --vswr 2.5 --json | jq '.values.returnLoss'

# List all calculators
rftools list

# Filter by category
rftools list --category rf

# Show calculator inputs/outputs
rftools info free-space-path-loss

# Library version
rftools version

Error Handling

from rftools.exceptions import AuthError, RateLimitError, ValidationError, NotFoundError, APIError

try:
    result = client.calculate("vswr-return-loss", {"vswr": 2.5})
except RateLimitError as e:
    print(f"Quota exceeded. Retry after: {e.retry_after}s")
except AuthError:
    print("Invalid API key")
except NotFoundError:
    print("Unknown calculator slug")
except ValidationError as e:
    print(f"Bad inputs: {e.detail}")
Exception When
AuthError Invalid or missing API key
RateLimitError Monthly quota exceeded
ValidationError Bad inputs (HTTP 422)
NotFoundError Unknown calculator slug
APIError Unexpected HTTP error

Async Support

import asyncio
import rftools

async def main():
    async with rftools.AsyncClient(api_key="rfc_live_xxx") as client:
        result = await client.calculate("vswr-return-loss", {"vswr": 2.5})
        print(result["returnLoss"])

asyncio.run(main())

Ideal for running many calculations concurrently in FastAPI or async scripts.

Browse the Catalog

# List all calculators
calcs = rftools.list_calculators()
print(f"{len(calcs)} calculators available")

# Filter by category
rf_calcs = rftools.list_calculators(category="rf")
for c in rf_calcs:
    print(f"{c.slug}: {c.title}")

# Get a single calculator's metadata
info = rftools.get_calculator("vswr-return-loss")
print(info.inputs)   # tuple of InputField
print(info.outputs)  # tuple of OutputField

All Calculator Categories

Category Count Example
rf 26 vswr-return-loss, free-space-path-loss, rf-link-budget
pcb 13 trace-width-current, via-calculator, microstrip-impedance
power 20 voltage-divider, led-resistor, battery-life
signal 13 filter-designer, op-amp-gain, pwm-duty-cycle
antenna 8 dipole-antenna, eirp-calculator, parabolic-dish-antenna
general 21 lc-resonance, ohms-law, rc-time-constant
motor 18 brushless-dc-motor, stepper-motor, servo-motor
protocol 11 uart-baud-rate, i2c-pullup, can-bus-bit-timing
emc 16 emi-filter-lc, shielding-effectiveness, ground-loop
thermal 6 thermal-resistance, heat-sink, junction-temperature
sensor 17 thermistor-ntc, strain-gauge, hall-effect
unit-conversion 17 dbm-watts, frequency-wavelength, temperature
audio 17 speaker-crossover, amplifier-gain, room-acoustics

Contributing

Regenerate stubs after calculator changes:

python scripts/generate_stubs.py --frontend-dir /path/to/rfhub/frontend

Then bump the version in pyproject.toml and publish a new release.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rftools_io-0.1.0.tar.gz (125.2 kB view details)

Uploaded Source

Built Distribution

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

rftools_io-0.1.0-py3-none-any.whl (131.8 kB view details)

Uploaded Python 3

File details

Details for the file rftools_io-0.1.0.tar.gz.

File metadata

  • Download URL: rftools_io-0.1.0.tar.gz
  • Upload date:
  • Size: 125.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for rftools_io-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c748bdd40d44c4a3cb09e2962bb5d6e18d7c58fa3ee22aac665f0df550b01aaa
MD5 5b7938f91e9c0db0d60d9c69e2c97619
BLAKE2b-256 e11ddc447e8427969cceb8e267327dd24809c65f63954e5e1d9ca8102865f5eb

See more details on using hashes here.

File details

Details for the file rftools_io-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rftools_io-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 131.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for rftools_io-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66d31a67ec3e6d71e17e285b3a52b24f3e64dc063c58ebc81274432b98e2620e
MD5 c80dccf7d847f08fc1f9c0501b40bfb2
BLAKE2b-256 be8bab1241958bc0d41f4d5f8731685ec21dcade474f26779294326f865233b2

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