Best Practices
1. Use Context Managers
# ✅ Good: Automatic cleanup
with YAPFileManager("config.json", auto_create=True) as fm:
fm.set_key("value", dot_key="key")
# ❌ Avoid: Manual cleanup
fm = YAPFileManager("config.json")
fm.load()
fm.set_key("value", dot_key="key")
fm.save()
2. Set Defaults
# ✅ Good: Always provide defaults
host = fm.get_key(dot_key="database.host", default="localhost")
# ❌ Avoid: No defaults
host = fm.get_key(dot_key="database.host") # Could be None
3. Validate Configuration
# ✅ Good: Validate before use
def load_config():
with YAPFileManager("config.json", auto_create=True) as fm:
# Set required defaults
if not fm.has_key(dot_key="database.host"):
fm.set_key("localhost", dot_key="database.host")
return fm.data
# ❌ Avoid: No validation
def load_config():
with YAPFileManager("config.json") as fm:
return fm.data # Could be missing required keys
4. Handle Errors Gracefully
# ✅ Good: Comprehensive error handling
try:
with YAPFileManager("config.json") as fm:
fm.set_key("value", dot_key="key")
except LoadFileError as e:
logger.error(f"Failed to load config: {e}")
# Fallback to default config
except FileWriteError as e:
logger.error(f"Failed to save config: {e}")
# Handle save failure
except Exception as e:
logger.error(f"Unexpected error: {e}")
# Handle unexpected errors
# ❌ Avoid: No error handling
with YAPFileManager("config.json") as fm:
fm.set_key("value", dot_key="key") # Could fail silently
5. Use Meaningful Key Names
# ✅ Good: Clear, descriptive keys
fm.set_key("localhost", dot_key="database.host")
fm.set_key(5432, dot_key="database.port")
fm.set_key("myapp", dot_key="database.name")
# ❌ Avoid: Unclear keys
fm.set_key("localhost", dot_key="db.h")
fm.set_key(5432, dot_key="db.p")
fm.set_key("myapp", dot_key="db.n")