File size: 2,245 Bytes
d06b99c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7f8f9a6
d06b99c
 
 
 
7f8f9a6
 
d06b99c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""
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
}