Decorator for generating metadata (parameters) of the Model.
The parameters are assigned to the Model.META variable.
Source code in src/ramifice/meta.py
| def meta(
service_name: str,
fixture_name: str | None = None,
db_query_docs_limit: int = 100,
is_create_doc: bool = True,
is_update_doc: bool = True,
is_delete_doc: bool = True,
) -> Any:
"""Decorator for generating metadata (parameters) of the Model.
The parameters are assigned to the Model.META variable.
"""
try: # ruff:ignore[too-many-statements-in-try-clause]
if not isinstance(service_name, str):
err_msg = "Parameter `service_name` - Must be `str` type!"
raise AssertionError(err_msg)
if not isinstance(fixture_name, (str, type(None))):
err_msg = "Parameter `fixture_name` - Must be `str | None` type!"
raise AssertionError(err_msg)
if not isinstance(db_query_docs_limit, int):
err_msg = "Parameter `db_query_docs_limit` - Must be `int` type!"
raise AssertionError(err_msg)
if not isinstance(is_create_doc, bool):
err_msg = "Parameter `is_create_doc` - Must be `bool` type!"
raise AssertionError(err_msg)
if not isinstance(is_update_doc, bool):
err_msg = "Parameter `is_update_doc` - Must be `bool` type!"
raise AssertionError(err_msg)
if not isinstance(is_delete_doc, bool):
err_msg = "Parameter `is_delete_doc` - Must be `bool` type!"
raise AssertionError(err_msg)
except AssertionError as err:
logger.critical(str(err))
raise err
def decorator(cls: Any) -> Any:
info_msg = f"Generating metadata for the `{cls.__module__}.{cls.__name__}` model."
logger.info(info_msg)
if Config.REGEX["service_name"].match(service_name) is None:
regex_str: str = "^[A-Z][a-zA-Z0-9]{0,24}$"
err_msg = f"Does not match the regular expression: {regex_str}"
logger.critical(err_msg)
raise DoesNotMatchRegexError(regex_str)
if fixture_name is not None:
fixture_path = f"config/fixtures/{fixture_name}.yml"
if not Path(fixture_path).exists():
err_msg = (
f"Model: `{cls.__module__}.{cls.__name__}` > "
+ "META param: `fixture_name` => "
+ f"Fixture the `{fixture_path}` not exists!"
)
logger.critical(err_msg)
raise PanicError(err_msg)
metadata = {
"service_name": service_name,
"fixture_name": fixture_name,
"db_query_docs_limit": db_query_docs_limit,
"is_create_doc": is_create_doc,
"is_update_doc": is_update_doc,
"is_delete_doc": is_delete_doc,
}
cls._META = {
**metadata,
**caching(cls, service_name),
}
logger.info("Metadata generation completed successfully.")
return cls
return decorator
|