Skip to main content

Overview

The e-commerce API uses environment variables for configuration. All settings are defined in .env files and loaded using python-dotenv. See .env.example for a template.
Never commit .env files with sensitive credentials to version control. Use .env.example as a template and add .env to .gitignore.

Application Settings

Basic Configuration

VariableTypeDefaultDescription
PORTinteger8000Port number for the API server
ENVstring-Environment name (development, staging, production)
API_HOSTstring-Public API host URL (e.g., https://api.example.com)
LOGGING_PATHstring/tmp/my-log-file.logPath for application logs

API Prefixes

The application uses multiple API versions and specialized prefixes:
API_PREFIX = '/api/v2'              # Main API v2
NEW_API_PREFIX = '/api/v3'          # New API v3
HAPTIK_API_PREFIX = '/api/v2/haptik'  # Haptik chatbot integration
EXTERNAL_API_PREFIX = '/api/v2/external'  # External partner APIs

Timezone

TIMEZONE_IST = 'Asia/Kolkata'  # Default timezone for the application

Database Configuration

MySQL (Primary Database)

Writer Instance

VariableTypeRequiredDescription
HOSTstringMySQL host address
DBPORTintegerMySQL port (default: 3306)
USERstringDatabase username
PASSWORDstringDatabase password
DATABASEstringDatabase name
POOL_SIZEinteger5SQLAlchemy connection pool size
MAX_OVERFLOWinteger30Maximum overflow connections

Reader Instance (Optional)

For read replicas:
VariableTypeRequiredDescription
R_HOSTstring-Reader host address
R_DBPORTinteger-Reader port
R_USERstring-Reader username
R_PASSWORDstring-Reader password
R_DATABASEstring-Reader database name
R_POOL_SIZEinteger5Reader pool size
R_MAX_OVERFLOWinteger30Reader max overflow
The application constructs MySQL connection URLs as:
# Writer
DATABASE_URL = 'mysql+pymysql://{USER}:{PASSWORD}@{HOST}:{DBPORT}/{DATABASE}'

# Reader
R_DATABASE_URL = 'mysql+pymysql://{R_USER}:{R_PASSWORD}@{R_HOST}:{R_DBPORT}/{R_DATABASE}'

MongoDB

VariableTypeRequiredDescription
MONGO_HOSTstringMongoDB host address
MONGO_PORTintegerMongoDB port (default: 27017)
MONGO_DATABASEstringDatabase name
MONGO_USERstring-MongoDB username (if auth enabled)
MONGO_PASSWORDstring-MongoDB password (if auth enabled)
MONGO_LIMITinteger50Default query limit

DGraph (Graph Database)

VariableTypeRequiredDescription
DGRAPH_SERVER_CLIENTstring-DGraph server address (e.g., localhost:9080)
from pymongo import MongoClient

# Without authentication
client = MongoClient(f"{MONGO_HOST}:{MONGO_PORT}")
db = client[MONGO_DATABASE]

# With authentication
client = MongoClient(
    f"mongodb://{MONGO_USER}:{MONGO_PASSWORD}@{MONGO_HOST}:{MONGO_PORT}/{MONGO_DATABASE}"
)

Cache Configuration

Redis Instances

The application uses multiple Redis instances for different purposes:

Primary Redis

VariableTypeDescription
REDIS_HOSTstringPrimary Redis host
REDIS_PORTintegerPrimary Redis port (default: 6379)

Specialized Redis Instances

# CMS Cache
CMS_REDIS_HOST=your-cms-redis-host
CMS_REDIS_PORT=6379
CMS_REDIS_DB=0
CMS_REDIS_USERNAME=
CMS_REDIS_PASSWORD=

# Buffer Cache
REDIS_BUFFER_HOST=your-buffer-redis-host
REDIS_BUFFER_PORT=6379

# Payment Cache
PAYMENT_REDIS_HOST=your-payment-redis-host
PAYMENT_REDIS_PORT=6379

# Blacklist Cache
BLACKLIST_REDIS_HOST=your-blacklist-redis-host
BLACKLIST_REDIS_PORT=6379

# User Cache
USER_REDIS_HOST=your-user-redis-host
USER_REDIS_PORT=6379

# A/B Testing
AB_REDIS_HOST=your-ab-redis-host
AB_REDIS_PORT=6379

# Abandon Cart
ABANDON_CART_REDIS_HOST=your-abandon-redis-host
ABANDON_CART_REDIS_PORT=6379
ABANDON_CART_REDIS_DB=0

Beaker Cache

VariableTypeDescription
BEAKER_REDIS_URLstringBeaker cache Redis URL (format: host:port)

Cache TTL Settings

# Cache duration in seconds
CACHE_ULTRA_SHORT_TERM=5        # 5 seconds
CACHE_MINI_SHORT_TERM=60        # 1 minute
CACHE_SHORT_TERM=600            # 10 minutes
CACHE_LONG_TERM=3600            # 1 hour
CACHE_MAJOR_LONG_TERM=7200      # 2 hours
CACHE_ULTRA_LONG_TERM=86400     # 24 hours

# Object expiry
REDIS_OBJECT_EXPIRY_IN_SEC=3600
REDIS_BLACKLIST_OBJECT_EXPIRY_IN_SEC=86400
REDIS_COUPON_EXPIRY_IN_SEC=3600

# Auth cache
AUTH_USER_CACHE_TTL=300         # 5 minutes

# Short URL cache
SHORT_URL_TTL_IN_SEC=86400      # 24 hours

Security Settings

Authentication

VariableTypeDescription
SECRET_KEYstringMain encryption key (256-bit recommended)
SECRET_KEY_512string512-bit encryption key for sensitive data
JWT_EXPIRY_DAYintegerJWT token expiry in days (default: 30)
JWT_EXPIRY_DAY_FOR_RESHIPintegerReship JWT expiry in days (default: 1)

Social Authentication

# Apple Sign-In
SOCIAL_AUTH_APPLE_KEY_ID=your-apple-key-id
SOCIAL_AUTH_APPLE_TEAM_ID=your-apple-team-id
CLIENT_ID=your-apple-client-id
ACCESS_TOKEN_URL=https://appleid.apple.com/auth/token

# Google reCAPTCHA
GOOGLE_RECAPTCHA_SECRET_KEY=your-recaptcha-secret
GOOGLE_RECAPTCHA_URL=https://www.google.com/recaptcha/api/siteverify

Password & OTP Settings

FORGOT_PASSWORD_DURATION=1  # Hours
FORGET_PASSWORD='http://localhost:8080/forgotpassword?token='

# Two-Factor Authentication
TWO_FA_ENABLE_DATETIME='09-16-2021'
VERIFICATION_COUNT=3
GENERATE_COUNT=2
RESEND_COUNT=6
USER_BLOCK_TIME_IN_SEC=86400  # 24 hours

AWS Services

AWS Credentials

VariableTypeDescription
AWS_ACCESS_KEYstringAWS access key ID
AWS_SECRET_KEYstringAWS secret access key
AWS_REGIONstringAWS region (e.g., ap-south-1)
AWS_ACCESS_KEY_IDstringS3 access key
AWS_SECRET_ACCESS_KEYstringS3 secret key
AWS_BUCKET_NAMEstringS3 bucket name

Kinesis Streams

KINESIS_PRODUCT_STREAM='product'
KINESIS_PRODUCT_UPDATE_STREAM='product_update_stream'
KINESIS_ORDERS_STREAM='tss-order-stream'
KINESIS_INSERT_RATE_LIMIT='1/s'

CELERY_KINESIS_ORDER_QUEUE='kinesis-order'
CELERY_KINESIS_PRODUCT_QUEUE='kinesis-product'

SEPARATE_SKU_CREATE_UPDATE_STREAM=1

SQS Configuration

SQS_AWS_ACCESS_KEY_ID=your-sqs-access-key
SQS_AWS_SECRET_ACCESS_KEY=your-sqs-secret-key
SQS_QUEUE_URL=https://sqs.region.amazonaws.com/account-id/queue-name

Celery Task Queues

Queue Names

# Core queues
CELERY_COMMS_QUEUE='comms'
SYNC_QUEUE='sync_queue'
SINGLE_SYNC_QUEUE='single_sync_queue'
SEARCH_SYNC_QUEUE='search_sync_queue'

# Order processing
CELERY_CANCEL_ORDER_QUEUE='cancel-order'
CELERY_ORDER_REFUND_QUEUE='order-refund'
ORDER_FLAG_QUEUE='order_flag_queue'
WAREHOUSE_ASSIGN_QUEUE='warehouse_assign_queue'
PROCESS_HL_ORDER_QUEUE='process-hl-order'

# Events
FB_EVENTS_QUEUE='fb-events-queue'
NETCORE_EVENTS_QUEUE='netcore_events_queue'
NETCORE_BATCH_QUEUE='netcore-batch'
MOENGAGE_ORDER_ATTIBUTES_QUEUE='moengage_order_attributes_sync_queue'

# User operations
USER_BLOCK_QUEUE='user-block'
USER_WEBHOOK_LOG_QUEUE='user-webhook-log'
VISITED_PRODUCT_LOGGING_QUEUE='visited-product-log'

# Logistics
CALLBACK_QUEUE='callback'
AUTODELIVER_QUEUE='autodeliver'
HL_AVAILABILITY_LOG_QUEUE='hl_availability_log_queue'
SAVE_EDD_QUEUE='save_edd_queue'

# Product ratings
PRODUCT_RATINGS_QUEUE='product_ratings_queue'

Celery Settings

CELERY_TASK_RESULT_EXPIRES_IN_SEC=3600
CELERY_VISIBILITY_TIMEOUT=3600

Payment Configuration

Payment Gateway

PAYMENT_URL='https://api.thesouledstore.com/api/v2/payment/'

# Payment method settings
BANK_SECRET_KEY=your-bank-secret-key
BANK_VALID_PAYMENT_METHODS='[1]'  # JSON array
ENABLE_RECOMMENDED_PAYMENT_METHOD=1
LAST_N_HOURS_FOR_PAY_METH=1
PAYMENT_METHOD_FAILURE_THRESHOLD=1

# Payment method mappings
APP_PAY_ID_INDEX_MAPPING='{}'
WEB_PAY_ID_VALUE_MAPPING='{}'

Juspay Integration

ALLOWING_OG_REFUND_MODE_BASED_ON_JUSPAY_STATUS=1
JUSPAY_ORDER_STATUS_API_URL='https://api.juspay.in/orders'
JUSPAY_BASE_AUTH_TOKEN='your-juspay-token'
JUSPAY_ORDER_STATUS_CACHE_TTL=3600

Order Settings

# Minimum order amounts
MIN_ORDER_AMOUNT=164
MIN_COD_VALUE=300
MAX_COD_VALUE=4000
COD_CHARGES=50

# Shipping
SHIPPING_CHARGES=50
MIN_CART_VALUE_SHIPPING_CHANNELS=445

# Processing fees
PREPAID_AMT_DEDUCTION=0
REFUND_FEE_IN_TSS_MONEY=1
REFUND_FEES_MODES='[]'

Third-Party Integrations

Vinculum (ERP)

VINCULUM_CANCEL_URL='https://thesouledstore.vineretail.com/RestWS/api/eretail/v1/order/cancel'
VINCULUM_CANCEL_URL_PRODUCT='...'
VINCULUM_API_OWNER='Test'
VINCULUM_API_KEY='your-vinculum-key'
VINCULUM_ORDER_DELIVERED_URL='...'
VINCULUM_ORDER_SHIPPED_URL='...'
VINCULUM_ORDER_UNHOLD_URL='...'
VINCULUM_ORDER_PULL_URL='...'
VINCULUM_ORDER_WAREHOUSE_UPDATE_URL='...'

Elasticsearch

ELASTIC_SEARCH_HOST='your-elasticsearch-host'
SEARCH_ENDPOINT='https://search.example.com'
ES_SYNCER='http://your-es-syncer:7070/'
ELASTIC_DB_URL='http://elasticsearch:9200'
USER_WIDGETS_ELASTIC_INDEX='user-widgets'

MoEngage

MOENGAGE_AUTHORIZATION='your-moengage-auth'
MOENGAGE_APPKEY='your-app-key'
MOENGAGE_URL='https://api.moengage.com'
MOENGAGE_EVENTS_URL='https://api.moengage.com/v1/event'
MOENGAGE_USER_ORDER_EVENTS_API='...'
IS_MOENGAGE_DELETE=0

CleverTap

X_CLEVERTAP_ACCOUNT_ID='your-account-id'
X_CLEVERTAP_PASSCODE='your-passcode'

Netcore

NETCORE_ACTIVITY_API_URL='https://api.netcorecloud.com'
NETCORE_ACTIVITY_API_AUTHORIZATION='your-authorization'
NETCORE_ACTIVITY_ASSET_ID='your-asset-id'

GupShup SMS

GUPSHUP_SMS_USER_ID='your-user-id'
GUPSHUP_SMS_PASSWORD='your-password'
GUPSHUP_URL='https://enterprise.smsgupshup.com'
USER_ID='your-gupshup-user'
GUPSHUP_PASSWORD='your-gupshup-pass'

Haptik (Chatbot)

HAPTIK_API_KEY='your-haptik-key'
HAPTIK_AUTH_ID='your-auth-id'
HAPTIK_AUTH_CODE='your-auth-code'
HAPTIK_ORDER_LIMIT=3

OneDirect

ONE_DIRECT_URL='https://api.onedirect.com'
ONE_DIRECT_API_KEY='your-api-key'
ONE_DIRECT_URL_HEALTH='https://api.onedirect.com/health'

OD_CLIENT_KEY='your-client-key'
OD_CREATE_TICKET_URL='...'
OD_CREATE_TICKET_BOUNDARY='...'
OD_CLOSE_TICKET_URL='...'
OD_TOKEN_REFRESH_URL='...'

Freshdesk

FRESHDESK_ENABLE=0
FRESHDESK_CREATE_TICKET_URL='https://yourdomain.freshdesk.com/api/v2/tickets'
FRESHDESK_BASIC_AUTH_USERNAME='your-api-key'
FRESHDESK_BASIC_AUTH_PASSWORD='X'
FRESHDESK_GROUP_ID=89000104397

Kapture CRM

KAPTURE_ENABLE=1
KAPTURE_CREATE_TICKET_URL='https://api.kapture.com/tickets'
KAPTURE_BASIC_AUTH='your-basic-auth-token'

Clickpost (Logistics)

CLICKPOST_USER='your-username'
CLICKPOST_PASSWORD='your-password'
CLICKPOST_EDD_URL='https://api.clickpost.in/api/v1/edd'
CLICKPOST_EDD_LOGIC=1
CLICKPOST_EDD_BUSINESS_LOGIC=1
CLICKPOST_TRACK_ORDER_URL='https://thesouledstore.clickpost.in/api/v1/track-order?waybill='
CP_BUFFER_DAYS=0

Ozonetel (Call Center)

OZONETEL_CALLBACK_MAX_RETRIES=1
OZONETEL_ADD_CAMPAIGN_DATA_URL='...'
OZONETEL_API_KEY='your-api-key'
OZONETEL_OUTBOUND_CAMPAIGN='your-campaign'
FAILED_CALL_MAX_RETRIES=3
CALLBACK_RETRY_TIME_SECONDS=300
CALLBACK_TIME_THRESHOLD=19  # 7 PM
CALLBACK_TIME_WINDOW_HOURS=24
ENABLE_MULTIPLE_CALLBACK_CHECK=1

GoKwik

GOKWIK_ORDER_STATUS_UPDATE_URL='https://api.gokwik.com/order/status'

Climes

CLIMES_URL='https://api.climes.com'
CLIMES_API_KEY='your-climes-key'
FIREBASE_DYNAMIC_LINK='https://firebasedynamiclinks.googleapis.com/v1/shortLinks'
FIREBASE_DYNAMIC_LINK_KEY='your-firebase-key'
FIREBASE_DYNAMIC_LINK_AUTH='your-auth-token'
FIREBASE_DYNAMIC_LINK_DOMAIN_URI_PREFIX='https://yourapp.page.link'
FIREBASE_DYNAMIC_LINK_ANDROID_PCKG='com.yourapp.android'
FIREBASE_DYNAMIC_LINK_IOS_BUNDLE_ID='com.yourapp.ios'
FIREBASE_DYNAMIC_LINK_IOS_APP_STORE_ID='123456789'
FIREBASE_DYNAMIC_LINK_IOS_IPAD_BUNDLE_ID='com.yourapp.ios.ipad'

Akamai

AKAMAI_HOST='your-akamai-host'
AKAMAI_CLIENT_TOKEN='your-client-token'
AKAMAI_CLIENT_SECRET='your-client-secret'
AKAMAI_ACCESS_TOKEN='your-access-token'

AlgoShack

ALGO_SHACK_PHONE_NUMBERS='[]'
ALGO_SHACK_KEY='your-algo-shack-key'
ALGO_SHACK_USER_DELETE_MSG='User Deleted'

Feature Flags

Product Features

# Exclusive membership
EXCLUSIVE_PRODUCT_ID=147421
EXCLUSIVE_PRICELISTS='[5, 3, 1]'
EXCLUSIVE_LAUNCH_DATE='2017-03-12 00:00:00'
SHOW_UPGRADE_PLAN=1
REMOVE_UPGRADE_MEMBERSHIP=1
IS_EXCLUSIVE_DISCOUNT_VISIBLE=1
EXCLUSIVE_IMAGE='https://cdn.example.com/exclusive.png'
EXCLUSIVE_PURCHASE_LINK='https://example.com/exclusive'
EXCLUSIVE_USER_BY_ORDER=0

# Product listings
FETCH_PRODUCTS_FROM_REDIS=1
FETCH_PLP_DATA_FROM_REDIS=1
RETRY_PLP_FROM_REDIS=1
FETCH_ARTISTS_FROM_REDIS=1
FETCH_TAGS_FROM_REDIS=1
FETCH_CATEGORIES_FROM_REDIS=1

# Cart validation
VALIDATE_CART_PRODUCTS=1
PREVENT_SALE_PRODUCT_CART=1

# Combos
COMBOS_LISTING_FLAG=0

# Gift cards
IS_GIFT_CARD=1
GC_SALT_KEY='your-salt-key'
GC_PIN_STATUS=0
GC_PIN_LIMIT=6
GC_PIN_LIMIT_EX=86400

Order Features

# Cancellation
DISABLE_CANCEL_FOR_PREPAID_ORDERS=1
PREPAID_ORDER_CANCEL_DISABLE_TAT_MINUTES=30
ALLOW_INTERNATIONAL_ORDER_CANCEL=0

# Return/Exchange
MAX_RETURN_DAYS=30
MAX_EXCHANGE_DAYS=30
MAX_EXCHANGE_TIMES=3
INTERNATIONAL_RETURN_EXACHANGE_DENY=1
STORE_ORDER_RETURN=0
STORE_ORDER_EXCHANGE=0
SHOW_FREEBIE_IN_EXCHANGE=1

# Refunds
UPDATE_AUTOMATED_REFUND_FEATURE=0
IS_REFUND_TSS_POINTS=0
REFUND_INITIATED_TRACKING_AVAILABLE=0
ENABLE_PLATFORM_FEE_REFUND_ON_UNDELIVERED=0
ENABLE_NO_REFUND_RETURN_TRANS_FEE=1
IS_DISABLED_REFUND_MODES=0

# EDD (Estimated Delivery Date)
SHOW_EXTENDED_EDD=1
EDD_EXTEND_DAYS=3
EDD_BUFFER_DAYS=0
IS_EDD_EARLY_DELAY_LOGIC=1
EDD_DAY_ADJUSTMENT=1
HIDE_DELIVERY_DATE_IF_OFD=0

User Features

# Registration
IS_REGISTER_API_DEPRECATED=0

# Account locking
USER_LOCK_ENABLE=0
USER_LOCK_EXPIRY=300

# Transaction locking
TXN_LOCK_ENABLE=0
TXN_LOCK_EXPIRY=900
DUPLICATE_ORDER_LOGGING=1
RESTRICT_USER_TXN_ENABLE=1

# Login
LOGIN_SMS_SAME_FOR_WEB=1
LOGIN_API_V2_EXPIRY_DATE='2025-12-31'

# Birthdate
DISABLED_BIRTHDATE=1
BIRTHDATE_UPDATE_AFTER=365
IS_AUTO_GENERATE_AGE=1

UI/UX Features

# Filters and sorting
URL_WISE_SORT=0
SHOW_ALL_CATEGORY_FILTER=1
IS_PRIMARY_CATEGORY=1
CONSIDER_FILTER_TOTAL_ONLY=1

# Product display
REMOVE_BLUR_ON_LAUNCH_DATE=1
REMOVE_LOCK_ON_LAUNCH_DATE=1
REMOVE_IMAGE_ON_PRODUCT_LOCK=1
REMOVE_PRODUCT_NAME_ON_PRODUCT_LOCK=1
REMOVE_PRODUCT_SLUG_ON_PRODUCT_LOCK=1
EXCLUDE_LOCKED_IMAGE=1

# Notifications
ENABLE_NOTIFICATIONS=1

# Tracking
IS_NEW_TRACKING_FOR_APP=1
IS_VISITED_PRODUCT_LOGGING_ENABLED=1

# Events
CART_EVENT_TRACK=0
CART_PROCESS_ORDER_TRACK=0

A/B Testing

DESIGN_TYPE='A'
UPDATED_VERSION=0
AB_DISTRIBUTION_PERCENTAGE=50

GST Configuration

IS_DYNAMIC_GST_ENABLED=1
DYNAMIC_GST_VALUE=5
DYNAMIC_GST_THRESHOLD=2500
EXCLUDE_CATEGORY_FOR_DYNAMIC_GST='[1136, 1120, 378, 1833]'
USE_PARENT_GST=1

Business Rules

TSS Points & Money

# Points
TSS_POINT_DISCOUNT_AMOUNT=10
TSS_POINT_TICKER_PRICE_PERCENTAGE=10
IS_TSS_POINTS_EXPIRE=1
TSS_POINTS_EXPIRE_AFTER=365
IS_TSS_POINT_REFUND_ON_RETURN=1

# Money
IS_TSS_MONEY_EXPIRE=1
TSS_MONEY_EXPIRY_IN_DAYS=365
THRESHOLD_TSS_MONEY_ENABLED=0
THRESHOLD_AMOUNT_FOR_TSS_MONEY=10000

# Expiry notifications
N_DAYS_FOR_EXPIRATION=0

Cashback

START_DATE_TIME='2020-10-30 00:00:00'
END_DATE_TIME='2020-11-15 23:59:59'
CASHBACK_PERCENT=20
CREDIT_CASHBACK_DAY=7
APP_CASHBACK_EXPIRY=90
APP_CASHBACK_ORDER_LIMIT=100
APP_CASHBACK_RETURN_ORDER_LIMIT=100
APP_DISCOUNT_PERCENT=10

Referral Program

REFERRAL_EARNING_AMT=100
REFERRAL_EARNING_EXPIRY=90

Freebies

EXCLUSIVE_FREEBIE='{}'
BAMBOO_TOOTHBRUSH_EM='product-id'
FREE_EXCLUSIVE_PRODUCT='product-id'
ADD_FREEBIE_ON_THE_BASE_OF_CART_MOV=1
USERTYPE_ALLOWED_FOR_FREEBIE='[2]'

Welcome Offer

WELCOME_NOTE_ENABLED=0
WELCOME_NOTE_PRODUCT_ID='product-id'

Miscellaneous

External URLs

V1_HOST='http://tss-staging.clu.pw/'
WWE_URL='http://staging.wweshop.in'
POS_ADMIN_URL='...'
TSS_OBSERVER_URL='...'
TSS_EVENTS_URL='...'
STAGING_CMS_ENDPOINT='...'
BACKEND_TSS_SYNC_BASE_URL='https://prod-backend-tss-sync.thesouledstore.pvt'
BACKEND_TSS_SYNC_API_KEY='your-sync-key'

Image URLs

IMAGE_HOST='https://prod-img.thesouledstore.com'
IMAGE_URL='https://prod-img.thesouledstore.com/public/theSoul/uploads/catalog/product/'
PRODUCT_URL='https://www.thesouledstore.com/product/'
IMAGE_URL_SUFFIX='?v=2'
IMAGE_SIZE_LIMIT=5  # MB
IMAGE_VALID_EXTENSIONS='["png","jpeg"]'

Site URLs

SITEURL='https://www.thesouledstore.com'
CATEGORYURL='https://www.thesouledstore.com/category/'
PRODUCTURL='https://www.thesouledstore.com/product/'
ARTISTURL='https://www.thesouledstore.com/artist/'
TAGURL='https://www.thesouledstore.com/tag/'
CHECKOUT_DOMAIN='https://checkout.thesouledstore.com'
SITE_CHECKOUT_LINK='https://www.thesouledstore.com/checkout'

Automation Testing

AUTOMATION_USER_ID=123456
AUTOMATION_USER_OTP=123456

Data Settings

ORDERS_DATA_START_DATE='2023-01-01 00:00:00'
IS_LINE_ITEM_ENABLED=1
SEND_PROD_QTY_INCASE_OF_COMBO=0

Environment-Specific Overrides

ENV=development
PORT=8001
API_HOST=http://localhost:8001
LOGGING_PATH=/tmp/dev-log.log
DB_ECHO=True
LOG_LEVEL=debug

Configuration Validation

Before deploying, validate your configuration:
import os
from settings import ENV

# Required variables
required_vars = [
    'PORT', 'HOST', 'USER', 'PASSWORD', 'DATABASE',
    'MONGO_HOST', 'MONGO_PORT', 'MONGO_DATABASE',
    'REDIS_HOST', 'REDIS_PORT',
    'SECRET_KEY', 'JWT_EXPIRY_DAY'
]

missing = [var for var in required_vars if not os.getenv(var)]
if missing:
    raise ValueError(f"Missing required environment variables: {missing}")

print(f"Configuration validated for environment: {ENV.get('ENV')}")

Next Steps

Build docs developers (and LLMs) love