flask_more_smorest.crud.blueprint_operationid

Enhanced Blueprint with automatic operationId generation.

This module provides BlueprintOperationIdMixin that extends Flask-Smorest’s Blueprint to automatically generate OpenAPI operationId values for endpoints.

Functions

strip_suffixes(name)

Strip common boilerplate suffixes from class or function names.

Classes

BlueprintOperationIdMixin(*args, **kwargs)

Blueprint mixin that provides automatic operationId generation.

flask_more_smorest.crud.blueprint_operationid.strip_suffixes(name)[source]

Strip common boilerplate suffixes from class or function names.

Strips suffixes in priority order so compound suffixes like V2List are handled correctly (V2 removed first, then List).

Parameters:

name (str) – Class or function name to normalise.

Return type:

str

Returns:

Name with recognised suffixes removed.

Example

>>> strip_suffixes("UserListView")
'User'
>>> strip_suffixes("AccreditationIndexV2")
'Accreditation'
>>> strip_suffixes("FeeEstimationView")
'FeeEstimation'
class flask_more_smorest.crud.blueprint_operationid.BlueprintOperationIdMixin(*args, **kwargs)[source]

Blueprint mixin that provides automatic operationId generation.

Extends Flask-Smorest’s Blueprint to automatically generate OpenAPI operationId values for routes based on the route pattern, HTTP method, class name (after suffix stripping) and response schema.

Collection detection for GET requests (in priority order):

  1. Manual @bp.doc(operationId=…) override → used as-is.

  2. Explicit operation_id= kwarg on route() → used as-is.

  3. Trailing slash in path → collection (listXxx).

  4. many=True on response schema → collection (listXxx).

  5. Default → individual (getXxx).

Examples:

bp = BlueprintOperationIdMixin('users', __name__)

# Auto-generated: listUsers
@bp.route('/users/')
class User(MethodView):
    def get(self): ...

# Custom full operationId for a function-based route
@bp.route('/special', operation_id='getSpecialUsers')
def special_users(): ...

# Prefix for all methods on a MethodView (e.g. deprecation)
@bp.route('/legacy', operation_id_prefix='_deprecated_')
class Item(MethodView):
    def get(self): ...   # → _deprecated_getItem
    def post(self): ...  # → _deprecated_createItem

# Suffix for versioning
@bp.route('/v2/users/', operation_id_suffix='_v2')
class User(MethodView):
    def get(self): ...   # → listUsers_v2

# Combine prefix and suffix
@bp.route('/old', operation_id_prefix='legacy_', operation_id_suffix='_v1')
class OldEndpoint(MethodView):
    def get(self): ...   # → legacy_getOldEndpoint_v1
__init__(*args, **kwargs)[source]
route(rule, *, operation_id=None, operation_id_prefix=None, operation_id_suffix=None, parameters=None, tags=None, **options)[source]

Override route() to capture operationId customisation options.

Parameters:
  • rule (str) – URL rule for the route.

  • operation_id (str | None) – Explicit full operationId (function-based routes) or override for every method on a MethodView.

  • operation_id_prefix (str | None) – Prefix prepended to the auto-generated operationId for every method on a MethodView.

  • operation_id_suffix (str | None) – Suffix appended to the auto-generated operationId for every method on a MethodView.

  • parameters (list | None) – OpenAPI path-level parameters (passed to parent).

  • tags (list[str] | None) – OpenAPI tags (passed to parent).

  • **options (Any) – Additional Flask routing options.

Return type:

Callable[[type[MethodView] | Callable], type[MethodView] | Callable]

Returns:

Decorator for the view class or function.

add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, *, parameters=None, tags=None, **options)[source]

Override to capture per-route operationId metadata before parent stores docs.

Return type:

None