EVE Online ESI OAuth handler with multi-character support
Project description
Evetech OAuth
A simple Python library for EVE Online ESI OAuth authentication with multi-character support and automatic token refresh.
Features
- 🚀 Easy EVE Online SSO authentication
- 📦 Simple ESI API requests
- 👥 Multi-character support
- 🔄 Automatic token refresh
- 💾 Persistent token storage (JSON file)
Installation
pip install evetech
Quick Start
1. Setup your EVE Application
- Go to EVE Developers
- Create a new application
- Set redirect URI to:
http://localhost:8000/callback - Note your
Client IDandClient Secret
2. Basic Usage
from evetech import Evetech
import os
# Set your EVE app credentials
client_id = "your_eve_client_id"
client_secret = "your_eve_client_secret"
# Create Evetech instance
eve = Evetech(client_id, client_secret)
# Optional: Set custom scopes
eve.set_scopes([
'publicData',
'esi-wallet.read_character_wallet.v1',
'esi-skills.read_skills.v1'
])
# Start authentication (opens browser)
eve.start_auth_server()
# After authentication, tokens are automatically saved
print(f"Authenticated as: {eve.get_current_character_name()}")
3. Making ESI Requests
# Get current character info
character_info = eve.get_character_info()
character_id = character_info['character_id']
# Make ESI requests (automatic token refresh)
character_data = eve.make_esi_request(f'/characters/{character_id}/')
print(f"Character: {character_data['name']}")
# Get wallet balance (requires wallet scope)
try:
wallet = eve.make_esi_request(f'/characters/{character_id}/wallet/')
print(f"Wallet: {wallet:,.2f} ISK")
except Exception as e:
print(f"Wallet access failed: {e}")
# Get character skills
skills = eve.make_esi_request(f'/characters/{character_id}/skills/')
print(f"Total SP: {skills['total_sp']:,}")
4. Multi-Character Support
# Authenticate multiple characters
eve = Evetech(client_id, client_secret)
# First character
eve.start_auth_server() # Login with first character
main_char = eve.get_current_character()
# Second character
eve.start_auth_server() # Login with second character
alt_char = eve.get_current_character()
# List all authenticated characters
characters = eve.get_character_list()
print("Authenticated characters:", characters)
# Output: {123456: 'Main Character', 789012: 'Alt Character'}
# Switch between characters
eve.set_current_character(main_char)
main_wallet = eve.make_esi_request(f'/characters/{main_char}/wallet/')
eve.set_current_character(alt_char)
alt_wallet = eve.make_esi_request(f'/characters/{alt_char}/wallet/')
# Or specify character directly
main_skills = eve.make_esi_request(f'/characters/{main_char}/skills/', character_id=main_char)
5. Token Management
# Check authentication status
if eve.is_authenticated():
print("Ready to make ESI calls")
# Check token expiration
if eve.is_token_expired():
print("Token will be refreshed automatically")
# Manual token refresh
eve.refresh_access_token()
# Save tokens manually (automatic by default)
eve.save_tokens()
# Remove a character
eve.remove_character(character_id)
Environment Variables
You can also use environment variables:
export EVE_CLIENT_ID="your_client_id"
export EVE_CLIENT_SECRET="your_client_secret"
import os
from evetech import Evetech
eve = Evetech(
os.environ['EVE_CLIENT_ID'],
os.environ['EVE_CLIENT_SECRET']
)
Configuration Options
eve = Evetech(
client_id="your_id",
client_secret="your_secret",
redirect_uri="http://localhost:8000/callback", # Custom redirect
port=8000, # Custom port
tokens_file="my_tokens.json" # Custom token file
)
Common ESI Endpoints
character_id = eve.get_character_info()['character_id']
# Character information
char_data = eve.make_esi_request(f'/characters/{character_id}/')
# Wallet balance
wallet = eve.make_esi_request(f'/characters/{character_id}/wallet/')
# Skills
skills = eve.make_esi_request(f'/characters/{character_id}/skills/')
# Assets
assets = eve.make_esi_request(f'/characters/{character_id}/assets/')
# Corporation info
corp_id = char_data['corporation_id']
corp_data = eve.make_esi_request(f'/corporations/{corp_id}/')
Available Scopes
Common EVE SSO scopes you might need:
publicData- Public character informationesi-wallet.read_character_wallet.v1- Wallet balanceesi-skills.read_skills.v1- Character skillsesi-assets.read_assets.v1- Character assetsesi-characters.read_corporation_roles.v1- Corporation rolesesi-markets.read_character_orders.v1- Market orders
Error Handling
try:
wallet = eve.make_esi_request(f'/characters/{character_id}/wallet/')
print(f"Balance: {wallet:,.2f} ISK")
except Exception as e:
if "403" in str(e):
print("Missing required scope for wallet access")
elif "token" in str(e).lower():
print("Authentication issue - try re-authenticating")
else:
print(f"API error: {e}")
Requirements
- Python 3.7+
- Flask 2.0+
- Requests 2.25+
License
GNU License, just say you like me :3
Contributing
Issues and pull requests welcome on GitHub!
Disclaimer
This library is not affiliated with CCP Games or EVE Online. EVE Online is a trademark of CCP.
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
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 evetech-2.0.4.tar.gz.
File metadata
- Download URL: evetech-2.0.4.tar.gz
- Upload date:
- Size: 22.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e589ff1b43a422ad6eebc81c6eb68ac99ce2b018730397e5f4e37e139923624d
|
|
| MD5 |
0d76ffc60db15eb7c53d2e77bdca30ff
|
|
| BLAKE2b-256 |
29b48fd3073aaf3dc02980a857287c4d5fd0931f25343662141042d03ac1d497
|
File details
Details for the file evetech-2.0.4-py3-none-any.whl.
File metadata
- Download URL: evetech-2.0.4-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
074d1c51b2554724b9fdd70e1f2fb59cd60be1498b8b0e6e95e853228e000a56
|
|
| MD5 |
af3fa8cbb136e7303bd29c9466d4c223
|
|
| BLAKE2b-256 |
07cfaf9bba0c8d22d6821e1ae1d0170d78919854662808a166fa570ad886bcdc
|