MCPcopy
hub / github.com/learnhouse/learnhouse / plan_dependency

Function plan_dependency

apps/api/src/security/features_utils/plan_check.py:89–131  ·  view source on GitHub ↗
(
        request: Request,
        db_session: AsyncSession = Depends(get_db_session),
    )

Source from the content-addressed store, hash-verified

87 """
88
89 async def plan_dependency(
90 request: Request,
91 db_session: AsyncSession = Depends(get_db_session),
92 ):
93 bypass = _check_mode_bypass(feature_name)
94 if bypass is not None:
95 return bypass
96
97 org_id = None
98
99 # Try to get org_id from path parameters first
100 org_id_param = request.path_params.get("org_id")
101 if org_id_param is not None:
102 try:
103 org_id = int(org_id_param)
104 except (ValueError, TypeError):
105 pass
106
107 # Try to get org_id from query parameters as fallback
108 if org_id is None:
109 org_id_query = request.query_params.get("org_id")
110 if org_id_query is not None:
111 try:
112 org_id = int(org_id_query)
113 except (ValueError, TypeError):
114 pass
115
116 if org_id is None:
117 raise HTTPException(
118 status_code=400,
119 detail="Organization ID is required",
120 )
121
122 current_plan = await get_org_plan(org_id, db_session)
123
124 if not plan_meets_requirement(current_plan, required_plan):
125 raise HTTPException(
126 status_code=403,
127 detail=f"{feature_name} requires a {required_plan.capitalize()} plan or higher. "
128 f"Your organization is currently on the {current_plan.capitalize()} plan.",
129 )
130
131 return True
132
133 return plan_dependency
134

Callers

nothing calls this directly

Calls 7

plan_meets_requirementFunction · 0.90
_check_mode_bypassFunction · 0.85
get_org_planFunction · 0.85
getMethod · 0.45
firstMethod · 0.45
scalarsMethod · 0.45
executeMethod · 0.45

Tested by

no test coverage detected