MCPcopy Index your code
hub / github.com/hugapi/hug / __init__

Method __init__

hug/interface.py:71–124  ·  view source on GitHub ↗
(self, function, args=None)

Source from the content-addressed store, hash-verified

69 """Defines the per-function singleton applied to hugged functions defining common data needed by all interfaces"""
70
71 def __init__(self, function, args=None):
72 self.api = hug.api.from_object(function)
73 self.spec = getattr(function, "original", function)
74 self.arguments = introspect.arguments(function)
75 self.name = introspect.name(function)
76 self._function = function
77
78 self.is_coroutine = introspect.is_coroutine(self.spec)
79 if self.is_coroutine:
80 self.spec = getattr(self.spec, "__wrapped__", self.spec)
81
82 self.takes_args = introspect.takes_args(self.spec)
83 self.takes_kwargs = introspect.takes_kwargs(self.spec)
84
85 self.parameters = list(introspect.arguments(self.spec, self.takes_kwargs + self.takes_args))
86 if self.takes_kwargs:
87 self.kwarg = self.parameters.pop(-1)
88 if self.takes_args:
89 self.arg = self.parameters.pop(-1)
90 self.parameters = tuple(self.parameters)
91 self.defaults = dict(zip(reversed(self.parameters), reversed(self.spec.__defaults__ or ())))
92 self.required = self.parameters[: -(len(self.spec.__defaults__ or ())) or None]
93 self.is_method = introspect.is_method(self.spec) or introspect.is_method(function)
94 if self.is_method:
95 self.required = self.required[1:]
96 self.parameters = self.parameters[1:]
97
98 self.all_parameters = set(self.parameters)
99 if self.spec is not function:
100 self.all_parameters.update(self.arguments)
101
102 if args is not None:
103 transformers = args
104 else:
105 transformers = self.spec.__annotations__
106
107 self.transform = transformers.get("return", None)
108 self.directives = {}
109 self.input_transformations = {}
110 for name, transformer in transformers.items():
111 if isinstance(transformer, str):
112 continue
113 elif hasattr(transformer, "directive"):
114 self.directives[name] = transformer
115 continue
116
117 if hasattr(transformer, "from_string"):
118 transformer = transformer.from_string
119 elif hasattr(transformer, "load"):
120 transformer = MarshmallowInputSchema(transformer)
121 elif hasattr(transformer, "deserialize"):
122 transformer = transformer.deserialize
123
124 self.input_transformations[name] = transformer
125
126 def __call__(__hug_internal_self, *args, **kwargs): # noqa: N805
127 """"Calls the wrapped function, uses __hug_internal_self incase self is passed in as a kwarg from the wrapper"""

Callers

nothing calls this directly

Calls 3

nameMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected