Library for making python classes from a set of functions.
More...
Go to the source code of this file.
|
string | python.function_class.INSTANCE_ARGUMENT = "instance" |
|
Library for making python classes from a set of functions.
- Author
- Mark Jenkins, ParIT Worker Co-operative mark@.nosp@m.pari.nosp@m.t.ca
-
Jeff Green, ParIT Worker Co-operative jeff@.nosp@m.pari.nosp@m.t.ca
Definition in file function_class.py.
◆ default_arguments_decorator()
def python.function_class.default_arguments_decorator |
( |
|
function, |
|
|
|
args, |
|
|
|
kargs |
|
) |
| |
Decorates a function to give it default, positional and keyword arguments.
mimics python behavior when setting defaults in function/method arguments. arguments can be set for positional or keyword arguments.
kargs_pos contains positions of the keyword arguments.
- Exceptions
-
A | TypeError will be raised if an argument is set as a positional and keyword argument at the same time. |
- Note
- It might be possible to get keyword argument positional information using introspection to avoid having to specify them manually
a keyword argument default will be overwritten by a positional argument at the actual function call
this function modifies the docstring of the wrapped function to reflect the defaults.
You can't use this decorator with @, because this function has more than one argument.
arguments:
- Parameters
-
*args | optional positional defaults |
kargs_pos | dict with keyword arguments as key and their position in the argument list as value |
**kargs | optional keyword defaults |
- Returns
- new_function wrapping original function
Definition at line 255 of file function_class.py.
255 def default_arguments_decorator(function, *args, **kargs):
256 """! Decorates a function to give it default, positional and keyword arguments 258 mimics python behavior when setting defaults in function/method arguments. 259 arguments can be set for positional or keyword arguments. 261 kargs_pos contains positions of the keyword arguments. 262 @exception A TypeError will be raised if an argument is set as a positional and keyword argument 264 @note It might be possible to get keyword argument positional information using 265 introspection to avoid having to specify them manually 267 a keyword argument default will be overwritten by a positional argument at the 270 this function modifies the docstring of the wrapped function to reflect 273 You can't use this decorator with @, because this function has more 277 @param *args: optional positional defaults 278 @param kargs_pos: dict with keyword arguments as key and their position in the argument list as value 279 @param **kargs: optional keyword defaults 281 @return new_function wrapping original function 284 def new_function(*function_args, **function_kargs):
286 if "kargs_pos" in kargs:
287 kargs_pos = kargs.pop(
"kargs_pos")
288 new_argset = list(function_args)
289 new_argset.extend(args[len(function_args) :])
290 new_kargset = {**kargs, **function_kargs}
291 for karg_pos
in kargs_pos:
292 if karg_pos
in new_kargset:
293 pos_karg = kargs_pos[karg_pos]
294 if pos_karg < len(new_argset):
295 new_kargset.pop(karg_pos)
297 return function(*new_argset, **new_kargset)
299 kargs_pos = {}
if "kargs_pos" not in kargs
else kargs[
"kargs_pos"]
300 for karg_pos
in kargs_pos:
301 if karg_pos
in kargs:
302 pos_karg = kargs_pos[karg_pos]
303 if pos_karg < len(args):
305 "default_arguments_decorator() got multiple values for argument '%s'" 309 if new_function.__doc__
is None:
310 new_function.__doc__ =
"" 313 new_function.__doc__ +=
"positional argument defaults:\n" 316 new_function.__doc__ +=
", " 318 new_function.__doc__ +=
" " 320 new_function.__doc__ += str(arg)
321 new_function.__doc__ +=
"\n" 323 new_function.__doc__ +=
"keyword argument defaults:\n" 325 if karg !=
"kargs_pos":
326 new_function.__doc__ += (
327 " " + str(karg) +
" = " + str(kargs[karg]) +
"\n" 330 new_function.__doc__ +=
"keyword argument positions:\n" 331 for karg
in kargs_pos:
332 new_function.__doc__ += (
333 " " + str(karg) +
" is at pos " + str(kargs_pos[karg]) +
"\n" 335 if len(args)
or len(kargs):
336 new_function.__doc__ += (
337 "(defaults have been set by default_arguments_decorator method)"
◆ extract_attributes_with_prefix()
def python.function_class.extract_attributes_with_prefix |
( |
|
obj, |
|
|
|
prefix |
|
) |
| |
Generator that iterates through the attributes of an object and
for any attribute that matches a prefix, this yields
the attribute name, the attribute value, and the text that appears
after the prefix in the name
Definition at line 373 of file function_class.py.
373 def extract_attributes_with_prefix(obj, prefix):
374 """Generator that iterates through the attributes of an object and 375 for any attribute that matches a prefix, this yields 376 the attribute name, the attribute value, and the text that appears 377 after the prefix in the name 379 for attr_name, attr_value
in iter(obj.__dict__.items()):
380 if attr_name.startswith(prefix):
381 after_prefix = attr_name[ len(prefix): ]
382 yield attr_name, attr_value, after_prefix
◆ method_function_returns_instance()
def python.function_class.method_function_returns_instance |
( |
|
method_function, |
|
|
|
cls |
|
) |
| |
A function decorator that is used to decorate method functions that
return instance data, to return instances instead.
You can't use this decorator with @, because this function has a second
argument.
Definition at line 226 of file function_class.py.
226 def method_function_returns_instance(method_function, cls):
227 """A function decorator that is used to decorate method functions that 228 return instance data, to return instances instead. 230 You can't use this decorator with @, because this function has a second 233 assert(
'instance' == INSTANCE_ARGUMENT )
234 def new_function(*args, **kargs):
235 kargs_cls = { INSTANCE_ARGUMENT : method_function(*args, **kargs) }
236 if kargs_cls[
'instance'] ==
None:
239 return cls( **kargs_cls )
◆ methods_return_instance()
def python.function_class.methods_return_instance |
( |
|
cls, |
|
|
|
function_dict |
|
) |
| |
Iterates through a dictionary of function name strings and instance names
and sets the function to return the associated instance
Definition at line 384 of file function_class.py.
384 def methods_return_instance(cls, function_dict):
385 """Iterates through a dictionary of function name strings and instance names 386 and sets the function to return the associated instance 388 for func_name, instance_name
in iter(function_dict.items()):
389 setattr(cls, func_name,
390 method_function_returns_instance( getattr(cls, func_name), instance_name))
◆ process_dict_convert_to_instance()
def python.function_class.process_dict_convert_to_instance |
( |
|
value_dict | ) |
|
Return a dict built from value_dict, where if a value is in an instance
of ClassFromFunctions, we put value.instance in the dict instead.
Things that are not instances of ClassFromFunctions are returned to
the new dict unchanged.
Definition at line 361 of file function_class.py.
361 def process_dict_convert_to_instance(value_dict):
362 """Return a dict built from value_dict, where if a value is in an instance 363 of ClassFromFunctions, we put value.instance in the dict instead. 365 Things that are not instances of ClassFromFunctions are returned to 366 the new dict unchanged. 369 key: return_instance_if_value_has_it(value)
for key, value
in value_dict.items()
◆ process_list_convert_to_instance()
def python.function_class.process_list_convert_to_instance |
( |
|
value_list | ) |
|
Return a list built from value_list, where if a value is in an instance
of ClassFromFunctions, we put value.instance in the list instead.
Things that are not instances of ClassFromFunctions are returned to
the new list unchanged.
Definition at line 351 of file function_class.py.
351 def process_list_convert_to_instance( value_list ):
352 """Return a list built from value_list, where if a value is in an instance 353 of ClassFromFunctions, we put value.instance in the list instead. 355 Things that are not instances of ClassFromFunctions are returned to 356 the new list unchanged. 358 return [ return_instance_if_value_has_it(value)
359 for value
in value_list ]
◆ return_instance_if_value_has_it()
def python.function_class.return_instance_if_value_has_it |
( |
|
value | ) |
|
Return value.instance if value is an instance of ClassFromFunctions,
else return value
Definition at line 342 of file function_class.py.
342 def return_instance_if_value_has_it(value):
343 """Return value.instance if value is an instance of ClassFromFunctions, 346 if isinstance(value, ClassFromFunctions):
347 return value.instance