CFL Common Utilities
cfl-common is a Python library providing a collection of common utilities, models, and helper functions used across various CFL (Cloud First Labs) projects. It aims to standardize common patterns for logging, configuration, data handling, and API interactions. The current version is 8.10.0, with a relatively frequent release cadence, often introducing minor improvements and occasionally breaking changes for better alignment with standard libraries.
Common errors
-
ModuleNotFoundError: No module named 'cfl_common'
cause Attempting to import the library using its PyPI package name (`cfl_common`) instead of its internal module name (`cfl`).fixChange your import statements from `import cfl_common` to `import cfl` or `from cfl import ...`. -
AttributeError: module 'cfl.common.utils' has no attribute 'json_load'
cause Using a deprecated JSON utility function (e.g., `json_load`, `json_dump`) that was removed in version 8.0.0 to promote standard library usage.fixReplace calls like `cfl.common.utils.json_load(data)` with `json.loads(data)` from the Python standard library's `json` module. -
AttributeError: module 'cfl.common.utils' has no attribute 'get_current_utc_datetime'
cause Using a deprecated datetime utility function (e.g., `get_current_utc_datetime`) that was removed in version 8.0.0.fixReplace calls like `cfl.common.utils.get_current_utc_datetime()` with `datetime.datetime.now(datetime.timezone.utc)` from the Python standard library's `datetime` module.
Warnings
- breaking Several utility functions that duplicated Python's standard library functionality (e.g., `json`, `datetime`, `re`, `urllib.parse`) were removed from `cfl.common.utils`.
- gotcha The PyPI package name is `cfl-common`, but the top-level import name for the library is `cfl`.
Install
-
pip install cfl-common
Imports
- cfl
import cfl_common
import cfl
- init_config, get_config_value
from cfl.config import init_config, get_config_value
- get_logger
from cfl.logger import get_logger
- sanitize_filename
from cfl.common.utils import sanitize_filename
Quickstart
import os
from cfl.logger import get_logger
from cfl.config import init_config, get_config_value
from cfl.common.utils import sanitize_filename
# Initialize a logger
logger = get_logger("my_app")
logger.info("Application started.")
# Initialize configuration (e.g., from .env or a dictionary)
# For a real application, you might load from a file or environment variables
config_dict = {
"APP_NAME": "MyCFLApp",
"API_KEY": os.environ.get("CFL_API_KEY", "default-api-key-for-dev")
}
init_config(config_dict=config_dict)
app_name = get_config_value("APP_NAME")
api_key = get_config_value("API_KEY")
logger.info(f"App Name from config: {app_name}")
logger.debug(f"API Key (for debug, not production logs): {api_key[:5]}...")
logger.warning(f"Sanitized filename example: {sanitize_filename('My File-1.0.txt')}")
logger.info("Application finished.")