def add_subparsers( parser: ArgumentParser, top_class: RecordClass, sub_parsers_field: RecordField, sub_parser_classes: Sequence[type], ): # noinspection PyArgumentList subparsers = cast( DatargsSubparsers, parser.add_subparsers( **top_class.sub_commands_params, action=DatargsSubparsers, name=sub_parsers_field.name, ), ) for command in sub_parser_classes: try: sub_parsers_args = top_class.wrap_class(command) except NotARecordClass: raise Exception( f"{top_class.name}.{sub_parsers_field.name}: " f"Union must be used with dataclass/attrs class and creates a subparser (got: {sub_parsers_field.type})" ) sub_parser = subparsers.add_parser( command, sub_parsers_args.datargs_params.name or camel2under(sub_parsers_args.name).replace("_", "-"), **sub_parsers_args.parser_params, ) _make_parser(sub_parsers_args, sub_parser)
def _get_default_name(func): from functools import partial if isinstance(func, partial): func = func.func # just one level of partial for now # func_name on py2, __name__ on py3 ret = getattr(func, 'func_name', getattr(func, '__name__', None)) # most functions hit this if ret is None: ret = camel2under(func.__class__.__name__).lower() # callable instances, etc. return ret
def get_inner_func_alias(func, inner_name, func_names=None): if func_names is None: func_names = set() func_name = get_func_name(func) func_alias = camel2under(func_name.replace('.', '__')) func_alias = func_alias.replace('middleware', 'mw') while func_alias in func_names: try: head, _, tail = func_alias.rpartition('_') cur_count = int(tail) func_alias = '%s_%s' % (head, cur_count + 1) except: func_alias = func_alias + '_2' return '%s_%s' % (inner_name, func_alias)
def from_camel_case_dict(cls, data): return cls(**filter_kwargs( cls, **{camel2under(k): v for k, v in data.items()}))
def mod_name(cls): return camel2under(cls.__name__)
def to_dict(self): return dict(name=strutils.camel2under(self.__class__.__name__), dataset_id=str(self.dataset.id) if self.dataset else None, uri=self.uri)
def camelcase_to_underscores(s): '''Converts a camelcased string to underscores''' return strutils.camel2under(s)