TreeTrack / constants.py
RoyAalekh's picture
feat: switch measurements to feet, add recorder UI, and persist telemetry to Supabase
7f8f9a6
raw
history blame
2.25 kB
"""
TreeTrack Application Constants
Centralized configuration constants to eliminate magic numbers
"""
from datetime import timedelta
# Authentication Constants
SESSION_TIMEOUT_HOURS = 8
SESSION_TIMEOUT = timedelta(hours=SESSION_TIMEOUT_HOURS)
AUTH_TOKEN_LENGTH = 32
# File Upload Constants
MAX_FILE_SIZE_MB = 10
MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024
DEFAULT_SIGNED_URL_EXPIRY = 3600 # 1 hour
EXTENDED_SIGNED_URL_EXPIRY = 7200 # 2 hours
# Database Constants
DEFAULT_TREES_LIMIT = 100
MAX_TREES_LIMIT = 1000
DEFAULT_SPECIES_LIMIT = 20
DEFAULT_OFFSET = 0
# Validation Constants (units in feet)
MAX_SPECIES_NAME_LENGTH = 200
MAX_NOTES_LENGTH = 2000
MAX_STORYTELLING_TEXT_LENGTH = 5000
MAX_TREE_CODE_LENGTH = 20
MAX_HEIGHT_FEET = 1000
MAX_GIRTH_FEET = 200
# Application Constants
APP_VERSION = "3.0.0"
BUILD_TIME_KEY = "BUILD_TIME"
# File Categories
VALID_IMAGE_CATEGORIES = ["Leaf", "Bark", "Fruit", "Seed", "Flower", "Full tree"]
# Utilities
VALID_UTILITIES = [
"Religious", "Timber", "Biodiversity", "Hydrological benefit",
"Faunal interaction", "Food", "Medicine", "Shelter", "Cultural"
]
# Phenology Stages
VALID_PHENOLOGY_STAGES = [
"New leaves", "Old leaves", "Open flowers", "Fruiting",
"Ripe fruit", "Recent fruit drop", "Other"
]
# API Rate Limiting
DEFAULT_RATE_LIMIT = 100 # requests per minute
BURST_RATE_LIMIT = 200
# Pagination Constants
MIN_LIMIT = 1
MAX_LIMIT_PER_REQUEST = 1000
# Logging
LOG_LEVEL_DEFAULT = "INFO"
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# Security
BCRYPT_ROUNDS = 12 # For password hashing
# Cache TTL
CACHE_TTL_SECONDS = 300 # 5 minutes
CACHE_TTL_LONG_SECONDS = 3600 # 1 hour
# Default Development Credentials
DEV_PASSWORDS = {
'AALEKH_PASSWORD': 'dev_password_aalekh',
'ADMIN_PASSWORD': 'dev_password_admin',
'ISHITA_PASSWORD': 'dev_password_ishita',
'JEEB_PASSWORD': 'dev_password_jeeb'
}
# Environment Variables
REQUIRED_ENV_VARS = {
'production': [
'SUPABASE_URL',
'SUPABASE_ANON_KEY',
'SUPABASE_SERVICE_ROLE_KEY',
'AALEKH_PASSWORD',
'ADMIN_PASSWORD',
'ISHITA_PASSWORD',
'JEEB_PASSWORD'
],
'development': [] # Optional in development
}