MCPcopy Create free account
hub / github.com/anomalyco/opencode-sdk-python / wrapper

Function wrapper

src/opencode_ai/_utils/_utils.py:250–283  ·  view source on GitHub ↗
(*args: object, **kwargs: object)

Source from the content-addressed store, hash-verified

248
249 @functools.wraps(func)
250 def wrapper(*args: object, **kwargs: object) -> object:
251 given_params: set[str] = set()
252 for i, _ in enumerate(args):
253 try:
254 given_params.add(positional[i])
255 except IndexError:
256 raise TypeError(
257 f"{func.__name__}() takes {len(positional)} argument(s) but {len(args)} were given"
258 ) from None
259
260 for key in kwargs.keys():
261 given_params.add(key)
262
263 for variant in variants:
264 matches = all((param in given_params for param in variant))
265 if matches:
266 break
267 else: # no break
268 if len(variants) > 1:
269 variations = human_join(
270 ["(" + human_join([quote(arg) for arg in variant], final="and") + ")" for variant in variants]
271 )
272 msg = f"Missing required arguments; Expected either {variations} arguments to be given"
273 else:
274 assert len(variants) > 0
275
276 # TODO: this error message is not deterministic
277 missing = list(set(variants[0]) - given_params)
278 if len(missing) > 1:
279 msg = f"Missing required arguments: {human_join([quote(arg) for arg in missing])}"
280 else:
281 msg = f"Missing required argument: {quote(missing[0])}"
282 raise TypeError(msg)
283 return func(*args, **kwargs)
284
285 return wrapper # type: ignore
286

Callers

nothing calls this directly

Calls 2

human_joinFunction · 0.85
quoteFunction · 0.85

Tested by

no test coverage detected